import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class MouseTracker extends Applet implements MouseListener, MouseMotionListener {

  private int xPos, yPos = -10;
  private String s = "";
  private Image offscreen;
  private Dimension offscreensize;
  private Graphics offgraphics;


  public void init() {

    addMouseListener(this);
    addMouseMotionListener(this);
  }


  public void paint(Graphics g) {

    Dimension d = getSize();
    if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) {
      offscreen = createImage(d.width, d.height);
      offscreensize = d;
      offgraphics = offscreen.getGraphics();
      offgraphics.setFont(getFont());
    }
    offgraphics.setColor(Color.white);
    offgraphics.fillRect(0, 0, getSize().width, getSize().height);
    offgraphics.setColor(Color.black);
    offgraphics.drawString(s + " @ [" + xPos + ", " + yPos + "]", xPos, yPos);

    g.drawImage(offscreen, 0, 0, this);
  }


  public void update(Graphics g) {

    paint(g);
  }


  public void setValues(String event, int x, int y) {

    s = event;
    xPos = x;
    yPos = y;
    repaint();
  }


  public void mouseClicked(MouseEvent e) {

    setValues("mouseClicked", e.getX(), e.getY());
  }


  public void mousePressed(MouseEvent e) {

    setValues("mousePressed", e.getX(), e.getY());
  }


  public void mouseReleased(MouseEvent e) {

    setValues("mouseReleased", e.getX(), e.getY());
  }


  public void mouseEntered(MouseEvent e) {

    setValues("mouseEntered", e.getX(), e.getY());
  }


  public void mouseExited(MouseEvent e) {

    setValues("mouseExited", e.getX(), e.getY());
  }


  public void mouseDragged(MouseEvent e) {

    setValues("mouseDragged", e.getX(), e.getY());
  }


  public void mouseMoved(MouseEvent e) {

    setValues("mouseMoved", e.getX(), e.getY());
  }
}
