import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ScribbleDemo extends JFrame {
  public ScribbleDemo() {
    // Create a PaintPanel and add it to the frame
    add(new ScribblePanel(), BorderLayout.CENTER);
    
    setTitle("ScribbleDemo");
    setLocationRelativeTo(null); // Center the frame
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300, 300);
  }

  /** Main method */
  public static void main(String[] args) {
    ScribbleDemo frame = new ScribbleDemo();
    frame.setVisible(true);
  }
}

// ScribblePanel for scribbling using the mouse
class ScribblePanel extends JPanel implements MouseMotionListener {
  final int CIRCLESIZE = 20; // Circle diameter used for erasing
  private Point lineStart = new Point(0, 0); // Line start point

  public ScribblePanel() {
    // Register listeners for mouse events
    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        lineStart.move(e.getX(), e.getY());
      }});

    addMouseMotionListener(this);
  }

  // MouseMotionListener methods
  public void mouseMoved(MouseEvent e) {}
  public void mouseDragged(MouseEvent e) {
    // Create a Graphics object for drawing
    Graphics g = getGraphics();

    if (e.isMetaDown()) { // Detect 'right button' pressed
      // Erase the drawing using an oval
      g.setColor(getBackground());
      g.fillOval(e.getX() - (CIRCLESIZE / 2),
         e.getY() - (CIRCLESIZE / 2), CIRCLESIZE, CIRCLESIZE);
    }
    else {
      g.setColor(Color.black);
      g.drawLine(lineStart.x, lineStart.y,
        e.getX(), e.getY());
    }

    lineStart.move(e.getX(), e.getY());

    // Dispose this graphics context
    g.dispose();
  }
}
