/** Adapted from Java in a Nutshell **/ import java.applet.Applet; import java.awt.Button; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; public class ScribbleApplet extends Applet implements ActionListener, MouseListener, MouseMotionListener { private int last_x, last_y; public void init() { addMouseListener(this); addMouseMotionListener(this); // Create a clear button Button b = new Button("Clear"); // Tell the button which object (this applet) has the // actionPerformed() method to call when button is clicked. b.addActionListener(this); add(b); } /** From ActionListener interface: clear the applet area when ** button is pressed **/ public void actionPerformed( ActionEvent e) { Graphics g = getGraphics(); g.setColor(getBackground()); Dimension d = getSize(); g.fillRect(0, 0, d.width, d.height); } /** From MouseListener interface: remember where mouse was ehen ** mouse button is pressed. **/ public void mousePressed( MouseEvent e) { last_x = e.getX(); last_y = e.getY(); } /** From MouseMotionListener interface: determine where mouse is ** while button is down; draw a line from last position to this ** one, remember where mouse is fo next time. **/ public void mouseDragged(MouseEvent e) { Graphics g = getGraphics(); int x = e.getX(); int y = e.getY(); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; } /** Both MouseListener and MouseMotionListener interfaces define ** other methods that must be implemented. These do nothing ** implementations satisfy the MouseListener interface ** "contract". **/ public void mouseReleased(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } /** And this do nothing implementation satisfies the ** MouseMotionListener interface "contract". **/ public void mouseMoved(MouseEvent e) { } }