PersistentFrameTest.java Source code

Java tutorial

Introduction

Here is the source code for PersistentFrameTest.java

Source

  
/*
   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>