Save Your Drawing To a File : Mouse Draw « 2D Graphics « Java Tutorial






import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;

public class SaveYourDrawingToFile extends JFrame implements MouseListener, ActionListener {
  List<Point> displayList = new ArrayList<Point>();
  String pathname = "data.dat";
  JButton clearBtn = new JButton("Clear");
  JButton saveBtn = new JButton("Save");
  JButton restoreBtn = new JButton("Restore");
  JButton quitBtn = new JButton("Quit");

  public static void main(String args[]) {
    SaveYourDrawingToFile that = new SaveYourDrawingToFile();
    that.setVisible(true);
  }

  public SaveYourDrawingToFile() {
    addMouseListener(this);

    setLayout(new BorderLayout());
    Panel pan = new Panel();
    clearBtn.addActionListener(this);
    pan.add(clearBtn);
    saveBtn.addActionListener(this);
    pan.add(saveBtn);
    restoreBtn.addActionListener(this);
    pan.add(restoreBtn);
    quitBtn.addActionListener(this);
    pan.add(quitBtn);
    add("North", pan);
    setSize(350, 200);
  }

  public void paint(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(0, 0, getSize().width, getSize().height);

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

  public void mousePressed(MouseEvent e) {
    Point p = new Point(e.getX(), e.getY());
    displayList.add(p);
  }

  public void mouseReleased(MouseEvent e) {
    Point p = new Point(e.getX(), e.getY());
    displayList.add(p);
    repaint();
  }

  public void mouseClicked(MouseEvent e) {
  }

  public void mouseEntered(MouseEvent e) {
  }

  public void mouseExited(MouseEvent e) {
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == clearBtn) {
      displayList = new Vector();
      repaint();
    } else if (e.getSource() == saveBtn) {
      try {
        FileOutputStream fos = new FileOutputStream(pathname);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(displayList);
        oos.flush();
        oos.close();
        fos.close();
      } catch (Exception ex) {
        System.out.println("Trouble writing display list vector");
      }
    } else if (e.getSource() == restoreBtn) {
      try {
        FileInputStream fis = new FileInputStream(pathname);
        ObjectInputStream ois = new ObjectInputStream(fis);
        displayList = (Vector) (ois.readObject());
        ois.close();
        fis.close();
        repaint();
      } catch (Exception ex) {
        System.out.println("Trouble reading display list vector");
      }
    } else if (e.getSource() == quitBtn) {
      setVisible(false);
      dispose();
      System.exit(0);
    }
  }
}








16.43.Mouse Draw
16.43.1.Mouse drag and drawMouse drag and draw
16.43.2.The SimpleDraw applicationThe SimpleDraw application
16.43.3.Draws a small dot where the user clicks the mouseDraws a small dot where the user clicks the mouse
16.43.4.Save Your Drawing To a File
16.43.5.Select the Ellipse to Move It in the CanvasSelect the Ellipse to Move It in the Canvas