package examples; import java.awt.*; import java.awt.event.*; import java.awt.geom.GeneralPath; import javax.swing.JPanel; @SuppressWarnings("serial") public class Scribble extends JPanel { // the view; public static final Stroke STROKE = new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL); GeneralPath sketch; // the model public Scribble(GeneralPath sketch) { this.sketch = sketch; } public Scribble() { this(new GeneralPath()); } public void reset() { sketch.reset(); repaint(); } public GeneralPath getSketch() { return sketch; } public void setSketch(GeneralPath sketch) { this.sketch = sketch; } @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.BLUE); ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); ((Graphics2D) g).setStroke(STROKE); ((Graphics2D) g).draw(sketch); } public static class Controller extends MouseAdapter implements MouseMotionListener { GeneralPath model; Scribble view; public Controller(Scribble view) { this.model = view.getSketch(); this.view = view; view.addMouseListener(this); view.addMouseMotionListener(this); } public void mousePressed(MouseEvent me) { model.moveTo(me.getX(), me.getY()); } public void mouseClicked(MouseEvent me) { if (me.getClickCount() > 1) { model.reset(); view.repaint(); } } public void mouseDragged(MouseEvent me) { model.lineTo(me.getX(), me.getY()); view.repaint(); } public void mouseMoved(MouseEvent arg0) { } } }