/*======================================================*/
/*  MouseFollow.java  -  Show how to track the mouse    */
/*======================================================*/

// <applet code="MouseFollow.class" width="425" height="275"> </applet>

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class MouseFollow extends Applet {

    /**
     *  Specify the size of the applet
     *  Set up the mouse listeners/handlers
     */
    public void init() {
        setSize(425, 275);
        addMouseListener(new MouseUpDownHandler());
        addMouseMotionListener(new MouseMotionHandler());
    }

    /**
     *  Handle the MousePressed event
     */
    class MouseUpDownHandler extends MouseAdapter {
        public void mousePressed(MouseEvent event) {
            if (bFlag)
                setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            else
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            bFlag = !bFlag;
            repaint();
        }
    }

    /**
     *  Handle the MouseMoved event
     */
    class MouseMotionHandler extends MouseMotionAdapter {
        public void mouseMoved(MouseEvent event) {
            mouseMovedHandler(event);
        }
    }

    /**
     *  Utility method for mouse motion
     */
    private void mouseMovedHandler(MouseEvent event) {
        showStatus("Mouse: " + event.getX() + "," + event.getY());
        x = event.getX();
        y = event.getY();
        repaint(x0, y0, dx, dy);
    }

    /**
     *  Paint the screen, update the mouse coordinates display
     */
    public void paint(Graphics g) {
        if (bFlag)
            g.drawString("Move the mouse...  Press it...", x0-30, 20);
        else
            g.drawString("Move the mouse...  Press it again...", x0-30, 20);
        g.drawString("Mouse:", x0-50, y0+10);
        g.drawString(x + "," + y, x0, y0+10);
        g.drawRect(x0-1, y0-1, dx+2, dy+2);
    }

    private int x, y;
    private boolean bFlag = true;
    private static final int x0 = 60, y0 = 30, dx = 45, dy = 12;

}

/*======================================================*/
