Cómo escribir un Oyente de Mouse-Motion

Los eventos Mouse-motion nos dicen cuando el usuario usa el ratón (u otro dispositivo similar) para mover el cursor sobre la pantalla.

Métodos de Evento Mouse-Motion

El interface MouseMotionListener y su correspondiente clase adaptador, MouseMotionAdapter, contienen estos métodos:
void mouseDragged(MouseEvent)
Llamado en respuesta a un movimiento del ratón por parte del usuario mientras mantiene pulsa uno de los botones delr atón. Este evento es disparado por el componente que disparó el evento mouse-pressed más reciente, incluso si el cursor ya no está sobre ese componente.
void mouseMoved(MouseEvent)
Llamado en respuesta a un movimiento del ratón por parte del usuario sin ningún botón puslado. El evento es disparado por el eventos que se encuentra actualmente debajo del cursor.

Ejemplos de Manejo de Eventos Mouse-Motion

El siguiente applet contiene un oyente de mouse-motion. Es exactamente igual que el applet de la página Cómo escribir un Oyente de Mouse, excepto en que sustituye MouseMotionListener por MouseListener, e implementa los método mouseDragged y mouseMoved en vez de los método del oyente de mouse. Puedes encontrar el código del applet en MouseMotionEventDemo.java y en BlankArea.java.

Pulsa esta imagen para ejecutar el applet.
Esto es una imagen del GUI del Applet. Para ejecutarlo, pulsa sobre ella. El applet aparecerá en una nueva ventana de tu navegador..


Prueba esto:
  1. Mueve el cursor dentro del rectángulo amarillo de la parte superior del applet.
    Verás uno o más eventos mouse-moved.
  2. Pulsa y mantén un botón de ratón y muevelo hasta que el cursor se salga del rectángulo amarillo.
    Verás eventos mouse-dragged.

El siguiente código contiene el manejo de eventos de la clase RectangleDemo.java. Esta clase maneja tres clases de eventos: mouse presses, mouse drags, y mouse releases. Estos eventos corresponden a los método mousePressed (de MouseListener), mouseDragged (de MouseMotionListener), mouseReleased (de MouseListener). Así, esta clase debe implementar tanto MouseListener como MouseMotionListener. Para evitar tener que manejar demasiados métodos vacios, esta clase no implementar MouseListener directamente. En su lugar, extiende MouseAdapter e implementa MouseMotionListener.

...//where initialization occurs:
    MyListener myListener = new MyListener();
    addMouseListener(myListener);
    addMouseMotionListener(myListener);
...
class MyListener extends MouseAdapter 
                 implements MouseMotionListener {
    public void mousePressed(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        currentRect = new Rectangle(x, y, 0, 0);
        repaint();
    }

    public void mouseDragged(MouseEvent e) {
        updateSize(e);
    }

    public void mouseMoved(MouseEvent e) {
        //Do nothing.
    }

    public void mouseReleased(MouseEvent e) {
        updateSize(e);
    }

    void updateSize(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        currentRect.setSize(x - currentRect.x,
                            y - currentRect.y);
        repaint();
    }
}

Métodos de Eventos usados por oyentes de Mouse-Motion

Cada evento mouse-motion tiene un sólo parámetro -- y no se llama MouseMotionEvent! En su lugar cada evento mouse-motion tiene un método con un argumento MouseEvent. Puedes ver la página La clase MouseEvent para más información sobre cómo utilizar objetos MouseEvent.

Ozito