Java tutorial
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); } } } }