This program demonstrates the use of an XML encoder and decoder to save and restore a frame.
/*
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>
Related examples in the same category