Mega Code Archive

 
Categories / Java / File Input Output
 

Working with Serialization

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class PersisTest extends JFrame implements ActionListener {   ArrayList displayList = new ArrayList();;   String pathname;   JButton clearBtn, saveBtn, restoreBtn, quitBtn;   public static void main(String args[]) {     if (args.length == 0) {       System.err.println("Usage: java PersisTest filename");       System.exit(-1);     }     new PersisTest(args[0]).show();   }   public PersisTest(String pathname) {     super("Save Me");     setDefaultCloseOperation(EXIT_ON_CLOSE);     this.pathname = pathname;     // Build the GUI. Make this object a listener for all actions.     JPanel pan = new JPanel();     clearBtn = new JButton("Clear");     clearBtn.addActionListener(this);     pan.add(clearBtn);     saveBtn = new JButton("Save");     saveBtn.addActionListener(this);     pan.add(saveBtn);     restoreBtn = new JButton("Restore");     restoreBtn.addActionListener(this);     pan.add(restoreBtn);     quitBtn = new JButton("Quit");     quitBtn.addActionListener(this);     pan.add(quitBtn);     Container c = getContentPane();     c.add(pan, BorderLayout.NORTH);     c.add(new ClickPanel(), BorderLayout.CENTER);     setSize(350, 200);   }   public void actionPerformed(ActionEvent e) {     if (e.getSource() == clearBtn) {       // Repaint with an empty display list.       displayList = new ArrayList();       repaint();     } else if (e.getSource() == saveBtn) {       // Write display list array list to an object output stream.       try {         FileOutputStream fos = new FileOutputStream(pathname);         ObjectOutputStream oos = new ObjectOutputStream(fos);         oos.writeObject(displayList);         oos.flush();         oos.close();         fos.close();       } catch (IOException ex) {         System.err.println("Trouble writing display list array list");       }     } else if (e.getSource() == restoreBtn) {       // Read a new display list array list from an object input stream.       try {         FileInputStream fis = new FileInputStream(pathname);         ObjectInputStream ois = new ObjectInputStream(fis);         displayList = (ArrayList) (ois.readObject());         ois.close();         fis.close();         repaint();       } catch (ClassNotFoundException ex) {         System.err.println("Trouble reading display list array list");       } catch (IOException ex) {         System.err.println("Trouble reading display list array list");       }     } else if (e.getSource() == quitBtn) {       System.exit(0);     }   }   class ClickPanel extends JPanel {     ClickPanel() {       MouseListener listener = new MouseAdapter() {         public void mousePressed(MouseEvent e) {           // Store x and y in display list array list.           Point p = new Point(e.getX(), e.getY());           displayList.add(p);         }         public void mouseReleased(MouseEvent e) {           // Store x and y in display list array list, and request           // repaint.           Point p = new Point(e.getX(), e.getY());           displayList.add(p);           repaint();         }       };       addMouseListener(listener);     }     public void paintComponent(Graphics g) {       // Clear to white.       g.setColor(Color.white);       g.fillRect(0, 0, getSize().width, getSize().height);       // Traverse display list, drawing 1 rect for each 2 points       // in the array list.       g.setColor(Color.black);       int i = 0;       while (i < displayList.size()) {         Point p0 = (Point) (displayList.get(i++));         Point p1 = (Point) (displayList.get(i++));         int x = Math.min(p0.x, p1.x);         int y = Math.min(p0.y, p1.y);         int w = Math.abs(p0.x - p1.x);         int h = Math.abs(p0.y - p1.y);         g.drawRect(x, y, w, h);       }     }   } }