Los eventos de Mouse nos cuentan cuando el usuario usa el rat�n (o un dispositivo de entrada similar) para interactuar con un componente. Los eventos Mouse ocurren cuando el cursor entra o sale del �rea de pantalla de un componente, o cuando el usuario pulsa o libera el bot�n del rat�n. Como seguir la pista del movimiento del rat�n significa mas sobrecarga del sistema que seguir la pista de los eventos de rat�n, los eventos mouse-motion se han separado en otro tipo de oyente (puedes ver C�mo escribir un Oyente de Mouse Motion).
�M�todos de Eventos Mouse
El interface MouseListener y su correspondiente clase adaptadora, MouseAdapter, contienen estos m�todos.
- void mouseClicked(MouseEvent)
- Llamado justo despu�s de que el usario pulse sobre el componente escuchado.
- void mouseEntered(MouseEvent)
- Llamado justo despu�s de que el cursor entre en los l�mites del componente escuchado.
- void mouseExited(MouseEvent)
- Llamado justo despu�s de que el cursor salga de los l�mites del componente escuchado.
- void mousePressed(MouseEvent)
- Llamado 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)
- Llamdo justo despu�s de que el usuario libere un bot�n del rat�n despu�s de una pulsaci�n sobre el componente esuchado.
Una complicaci�n afecta a los evntos mouse-entered, mouse-exited, y mouse-released. Cuando el usuario arrastra (pulsa y mantiene el bot�n del rat�n y luego mueve el rat�n), entonces el componente sobre el que estaba el cursor cuando empez� el arrastre es el que recibe todos los subsecuentes eventos de mouse y mouse-motion incluyendo la liberaci�n del bot�n. Esto significa que ning�n otro componente recibera un s�lo evento del rat�n -- ni siquiera un evento mouse-released -- mientras est� ocurriendo el arrastre.
�Ejemplos de Manejo de Eventos Mouse
El siguiente applet contiene un oyente de mouse. En la parte superior del applet hay un �rea vac�a, (implementada por una clase llamda BlankArea). El oyente de mouse escucha los eventos del BlankArea y de su contenedor, que es un ejemplar de MouseEventDemo. Cada vez que ocurre un evento de mouse, se muestra un mensaje descriptivo sobre el �rea blanca. Moviendo el cursor sobre el �rea blanca y ocasionalmente pulsado alg�n bot�n del rat�n podemos generar eventos mouse.
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:
|
Puedes encontrar el c�digo del applet en MouseEventDemo.java y BlankArea.java. Aqu� tenemos el c�digo de manejo de eventos del applet.
public class MouseEventDemo ... implements MouseListener { ...//where initialization occurs: //Register for mouse events on blankArea and applet (panel). blankArea.addMouseListener(this); addMouseListener(this); ... public void mousePressed(MouseEvent e) { saySomething("Mouse pressed; # of clicks: " + e.getClickCount(), e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse released; # of clicks: " + e.getClickCount(), e); } public void mouseEntered(MouseEvent e) { saySomething("Mouse entered", e); } public void mouseExited(MouseEvent e) { saySomething("Mouse exited", e); } public void mouseClicked(MouseEvent e) { saySomething("Mouse clicked (# of clicks: " + e.getClickCount() + ")", e); } void saySomething(String eventDescription, MouseEvent e) { textArea.append(eventDescription + " detected on " + e.getComponent().getClass().getName() + "." + newline); } }
Podemos encontrar m�s ejemplos de oyentes de rat�n en los siguientes ficheros fuente.
�La Clase MouseEvent
Cada m�todo de evento mouse tiene un s�lo par�metero: un objeto MouseEvent. La clase MouseEvent define los siguientes m�todos .
- int getClickCount()
- Devuelve el n�mero de pulsaciones que el usuario ha realizado (incluyendo este evento).
- int getX()
- int getY()
- Point getPoint()
- Devuelve la posici�n (x,y) en la que ocurri� el evento, relativa al componente que gener� el evento.
- boolean isPopupTrigger()
- Devuelve true si el evento mouse deber�a hacer que apareciera un men� popup. Como los disparadores de men�s popup son dependientes de la plataforma, si nuestro programa los usa, deber�amos llamar a isPopupTrigger en todos los eventos mouse-pressed y mouse-released geneados por componentes sobre los que el popup pueda aparecer.
La clase MouseEvent hereda los siguientes m�todos de ComponentEvent.
- Component getComponent
- Devuelve el componente que gener� el evento. Podemos usar este m�todo en vez de getSource.
La clase MouseEvent hereda otros muchos m�todos �tiles de InputEvent.
- void consume()
- Hace que el evento no sea procesado por el padre del componente. Se podr�a usar este m�todo para descartar letras tecleadas en un campo de texto que s�lo hacepta n�meros.
- int getWhen()
- Devuelve el momento en que ocurri� el evento.
- boolean isAltDown()
boolean isControlDown()
boolean isMetaDown()
boolean isShiftDown()
- Devuelven el estado individual de las teclas modificadores en el momento en que se gener� el evento.
- int getModifiers()
- Devuelve el estado de todas las teclas modificadoras y bot�nes del rat�n, cuando se gener� el evento. Podemos usar este m�todo para determinar qu� bot�n fue pulsado (o liberado) cuando el evento del rat�n fue generado. La clase InputEvent define estas constantes para usarlas con el m�todo getModifiers: ALT_MASK, BUTTON1_MASK, BUTTON2__MASK, BUTTON3_MASK, CTRL_MASK, META_MASK, y SHIFT_MASK. Por ejemplo, la siguiente expresi�n es verdadera si se puls� el bot�n derecho.
(mouseEvent.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK
La clase SwingUtilities contiene m�todos de conveniencia para determinar si se ha pulsado un bot�n particular del rat�n.
- static boolean isLeftMouseButton(MouseEvent)
static boolean isMiddleMouseButton(MouseEvent)
static boolean isLEFTMouseButton(MouseEvent)
- static boolean isLeftMouseButton(MouseEvent)