## Escribir un Oyente de Ratón

Los eventos de Ratón te dicen cuando el usuario utiliza el ratón (u otro dispositivo de entrada similar) para interactuar con un componente. Los eventos de ratón ocurren cuando el cursor entra o sale del área de pantalla de un componente o cuando el usuario presiona o libera un botón del ratón. Como seguir la pista de los movimientos del cursor envuelve un sobrecarga del sistema más significante que los eventos del ratón, los eventos de movimiento se han separado en otro tipo de oyente. (Puedes ver Escribir un Oyente de Movimientos del Ratón).

#### Métodos de Eventos del Ratón

> El interface MouseListener y su correspondiente clase adaptador, MouseAdapter, contienen tres métodos:
> void mouseClicked(MouseEvent)
>   Llamado por el AWT justo despues de que el usuario pulse sobre el componente escuchado.
> void mouseEntered(MouseEvent)
>   Llamado por el AWT justo después de que el cursor entre en los límites del componente escuchado, si no está pulsado el botón del ratón.
> void mouseExited(MouseEvent)
>   LLamado por el AWT justo después de que el cursor abandone los límites del componente escuchado, si no está pulsado el botón del ratón.
> void mousePressed(MouseEvent)
>   Llamado por el AWT justo después de que el usuario pulse un botón del ratón mientras el cursor está sobre el componente escuchado.
> void mouseReleased(MouseEvent)
>   Llamado por el AWT justo después de que el usuario libere un botón del ratón. El evento de liberación de ratón es disparado por el mismo componente que acaba de generar el evento de ratón pulsado, no importa donde esté el cursor cuando ocurra la liberación del botón.

#### Ejemplos de Manejo de Eventos de Ratón

> El siguiente applet demuestra los eventos del ratón. En la parte superior del applet hay un área vacía (implementada por una clase llamada BlankArea). Un oyente de ratón escucha los eventos tanto del BlankArea como de su propio contendor, que es un ejemplar de MouseDemo. Cada vez que ocurre un evento de ratón, se muestra un mensaje descriptivo debajo del área vacía. Moviendo el cusor sobre el área vacía y pulsando los botones del ratón podrás ver los eventos generados por el ratón.

> > Intenta esto:
> > 1. Mueve el cusor dentro del rectángulo que hay en la parte superior del applet.
> >    Verás uno o más eventos de "mouse enter" [que deberían ser mostrador como "Custor enter"].
> > 2. Pulsa y manten el botón del ratón.
> >    Verás un evento de "mouse press". Podrías ver algunos eventos extras como "mouse exit" o "mouse enter".
> > 3. Libera el botón del ratón.
> >    Verás un evento de "mouse release". Si no has movido el ratón seguirá un evento de "mouse click".
> > 4. Pulsa y manten el botón del ratón y luego arrastra el ratón hasta el exterior del área del applet. Libera el botón del ratón.
> >    Verás un evento de "mouse press", seguido por un evento de "mouse exit" y seguido por un evento de "mouse release". No has sido notificado sobre el movimiento del cursor. Para obtener los movimientos del ratón, necesitas implementar un Oyente de movimiento de ratón.

> Aquí podrás encontrar el código completo del appletMouseDemo.java. Y aquí tienes el código de manejo de eventos del applet:

> >     public class MouseDemo ... implements MouseListener {
> >     	...//Donde ocurra la inicialización:
> >             //Registrado para los eventos del ratón en el blankArea
> >     		//y en el applet (panel).
> >             blankArea.addMouseListener(this);
> >             addMouseListener(this);
> >         ...

> >         public void mousePressed(MouseEvent e) {
> >            saySomething("Mouse button press", e);
> >         }

> >         public void mouseReleased(MouseEvent e) {
> >            saySomething("Mouse button release", e);
> >         }

> >         public void mouseEntered(MouseEvent e) {
> >            saySomething("Cursor enter", e);
> >         }

> >         public void mouseExited(MouseEvent e) {
> >            saySomething("Cursor exit", e);
> >         }

> >         public void mouseClicked(MouseEvent e) {
> >            saySomething("Mouse button click", e);
> >         }

> >         void saySomething(String eventDescription, MouseEvent e) {
> >             textArea.append(eventDescription + " detected on "
> >                             + e.getComponent().getClass().getName()
> >                             + ".\n");
> >             textArea.setCaretPosition(maxInt); //scroll to bottom
> >         }
> >     }

#### La clase MouseEvent

> Cada método de evento de ratón tiene un sólo parámetro: un objeto MouseEvent La clase MouseEvent define los siguientes métodos:

> int getClickCount()
>   Devuelve el número de rápidos, clicks consecutivos que ha realizado el usuario (incluido este evento).

> int getX()
> int getY()
> Point getPoint()
>   Devuelve la posición (x,y) del cursor cuando ocurrió el evento, relativo al componente sobre el que ocurrió el evento.
> boolean isPopupTrigger()
>   Devuelve true si el evento debería causar que apareciera un menú popup. Como los disparos de popup son dependientes de la plataforma, si tu programa utiliza menús popup, deberías llamar a isPopupTrigger para los eventos de "mouse down" y "mouse up".

> La clase MouseEvent desciende de InputEvent, que desciende de ComponentEvent. ComponentEvent proporciona el método getComponent. InputEvent proporciona los siguientes métodos:

> int getWhen()
>   Devuelve el momento en el que ocurrió el evento. Un mayor número aquí indica que el evento ha ocurrido más recientemente.

> boolean isAltDown()
> boolean isControlDown()
> boolean isMetaDown()
> boolean isShiftDown()
>   Estos métodos te ofrecen el estado de las teclas modificadoras cuando el evento fue generado.

> int getModifiers()
>   Devuelve una bandera indicando el estado de todas las teclas modificadoras cuando el evento fue generado.

Ozito