现在的位置: 首页 > 综合 > 正文

Swing之保存窗口对象XMLEncoder和XMLDecoder 类使用示例

2012年12月10日 ⁄ 综合 ⁄ 共 2026字 ⁄ 字号 评论关闭

XMLEncoder 类是 ObjectOutputStream 的互补替换,可用于生成 JavaBean 的文本表示形式,所使用方式与用 ObjectOutputStream 创建 Serializable 对象的二进制表示形式的方式相同。

XMLDecoder 类用于读取使用 XMLEncoder 创建的 XML 文档,用途类似于 ObjectInputStream。例如,用户可以使用以下代码片段来读取以 XML 文档形式(通过 XMLEncoder 类写入)定义的第一个对象:

例子创建一个JFrame,用XMLEncoder将JFrame对象保存到XML文件中,将保存好的XML文件通过XMLDecoder对象读出并显示JFrame。

import java.awt.BorderLayout;   
import java.awt.Dimension;   
import java.awt.event.ActionEvent;   
import java.awt.event.ActionListener;   
  
import java.beans.XMLDecoder;   
import java.beans.XMLEncoder;   
import java.io.BufferedInputStream;   
import java.io.FileInputStream;   
import java.io.FileNotFoundException;   
import javax.swing.AbstractListModel;   
import javax.swing.JButton;   
import javax.swing.JFrame;   
import javax.swing.JList;   
import javax.swing.JScrollPane;   
  
public class JBenchFrame extends JFrame {   
  BorderLayout borderLayout1 = new BorderLayout();   
  JList list1 = new JList();   
  JButton fillButton = new JButton();   
  
  public static void main(String[] args) throws FileNotFoundException {   
//    JBenchFrame bm = new JBenchFrame();   
//   
//    XMLEncoder e = new XMLEncoder(   
//                          new BufferedOutputStream(   
//                              new FileOutputStream("Test.xml")));   
//       e.writeObject(bm);   
//       e.close();   
  
      XMLDecoder d = new XMLDecoder(   
                          new BufferedInputStream(   
                              new FileInputStream("Test.xml")));   
       JFrame result = (JFrame)d.readObject();   
       d.close();   
       result.setVisible(true);   
  
  }   
  
  public JBenchFrame() {   
    this.getContentPane().setLayout(borderLayout1);   
    this.setSize(new Dimension(400, 300));   
    fillButton.addActionListener(new ActionListener() {   
      public void actionPerformed(ActionEvent e) {   
        ListData ld = new ListData();   
        long tmStart = System.currentTimeMillis();   
        list1.setModel(ld);   
        list1.repaint();   
        long tmEnd = System.currentTimeMillis();   
        System.out.println(tmEnd - tmStart);   
  
      }   
    });   
    fillButton.setText("Fill");   
    this.getContentPane().add(new JScrollPane(list1), BorderLayout.CENTER);   
    this.getContentPane().add(fillButton, BorderLayout.SOUTH);   
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  
       
  }   
  
}   
  
class ListData extends AbstractListModel {   
  String[] strings = new String[10000];   
  
  public ListData() {   
    for (int i = 0; i < 10000; i++) {   
      strings[i] = "bob" + i;   
    }   
  }   
  
  public int getSize() {   
    return strings.length;   
  }   
  
  public Object getElementAt(int index) {   
    return strings[index];   
  }   
}  

抱歉!评论已关闭.