Java tutorial
/* This program is a part of the companion code for Core Java 8th ed. (http://horstmann.com/corejava) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ import java.awt.*; import java.awt.event.*; import java.beans.*; import java.io.*; import javax.swing.*; /** * This program demonstrates the use of an XML encoder and decoder to save and restore a frame. * @version 1.01 2007-10-03 * @author Cay Horstmann */ public class PersistentFrameTest { public static void main(String[] args) { chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); PersistentFrameTest test = new PersistentFrameTest(); test.init(); } public void init() { frame = new JFrame(); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("PersistentFrameTest"); frame.setSize(400, 200); JButton loadButton = new JButton("Load"); frame.add(loadButton); loadButton.addActionListener(EventHandler.create(ActionListener.class, this, "load")); JButton saveButton = new JButton("Save"); frame.add(saveButton); saveButton.addActionListener(EventHandler.create(ActionListener.class, this, "save")); frame.setVisible(true); } public void load() { // show file chooser dialog int r = chooser.showOpenDialog(null); // if file selected, open if(r == JFileChooser.APPROVE_OPTION) { try { File file = chooser.getSelectedFile(); XMLDecoder decoder = new XMLDecoder(new FileInputStream(file)); decoder.readObject(); decoder.close(); } catch (IOException e) { JOptionPane.showMessageDialog(null, e); } } } public void save() { if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { try { File file = chooser.getSelectedFile(); XMLEncoder encoder = new XMLEncoder(new FileOutputStream(file)); encoder.writeObject(frame); encoder.close(); } catch (IOException e) { JOptionPane.showMessageDialog(null, e); } } } private static JFileChooser chooser; private JFrame frame; } <?xml version="1.0" encoding="UTF-8"?> <java version="1.6.0_01" class="java.beans.XMLDecoder"> <object class="javax.swing.JFrame"> <void property="bounds"> <object class="java.awt.Rectangle"> <int>33</int> <int>0</int> <int>400</int> <int>200</int> </object> </void> <void property="contentPane"> <void method="add"> <object class="javax.swing.JButton"> <string>Load</string> <void method="addActionListener"> <object class="java.beans.EventHandler" method="create"> <class>java.awt.event.ActionListener</class> <object id="PersistentFrameTest0" class="PersistentFrameTest"/> <string>load</string> </object> </void> </object> </void> <void method="add"> <object class="javax.swing.JButton"> <string>Save</string> <void property="model"> <void property="rollover"> <boolean>true</boolean> </void> </void> <void method="addActionListener"> <object class="java.beans.EventHandler" method="create"> <class>java.awt.event.ActionListener</class> <object idref="PersistentFrameTest0"/> <string>save</string> </object> </void> </object> </void> <void property="layout"> <object class="java.awt.FlowLayout"/> </void> </void> <void property="defaultCloseOperation"> <int>3</int> </void> <void property="minimumSize"> <object class="java.awt.Dimension"> <int>143</int> <int>62</int> </object> </void> <void property="name"> <string>frame0</string> </void> <void property="title"> <string>PersistentFrameTest</string> </void> <void method="addWindowListener"> <object class="sun.awt.im.InputMethodContext"/> </void> <void property="visible"> <boolean>true</boolean> </void> </object> </java>