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

本文介绍了如何在Java中使用XMLEncoder类将对象序列化为XML格式,并通过XMLDecoder类将XML文件反序列化回对象。示例代码展示了如何创建JFrame对象,将其保存到XML文件中,然后从XML文件中读取并显示JFrame。
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];   
  }   
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值