Programando en Java: Control del Mouse - MouseListener (IV)
Particularmente, lo que me interesaba era manipular con movimientos del mouse una serie de gráficos (que tenía dibujados en los Panels creados anteriormente), desplazar un gráfico respecto a los ejes, mover vértices de lugar, hacer zooms, cambiar el tamaño, en fin, prácticamente cualquier cosa que se nos pueda ocurrir puede hacerse.
Para tal cosa, he utilizado MouseAdapter implementando MouseMotionListener. A continuación os explico cómo hacer uso de estas clases.
Lo primero que debemos hacer es incluir awt y awt.event, si no las tenemos ya, de la siguiente manera:
import java.awt.*;
import java.awt.event.*;
Una vez hecho esto, a la clase que tengamos creada que deriva de Panel (o cualquier componente gráfico) debemos añadirle un MouseListener, para poder controlar el movimiento del mouse en ese panel.
PanelMouseListener mouse;
mouse = new PanelMouseListener();
addMouseListener(mouse);
addMouseMotionListener(mouse);
Con esto añadimos un MouseListener y MouseMotionListener a nuestro Panel.
PanelMouseListener es el nombre de la clase que escuchará los eventos del mouse.
La declaración de dicha clase debe hacerse de esta forma:
Nota: Para simplificar, podemos hacer la clase privada (obviando la etiqueta public delante) e incluirla dentro de la clase del Panel (en el mismo fichero).
class PanelMouseListener extends MouseAdapter implements MouseMotionListener {
Ahora viene lo divertido.
Las funciones que deben sobrecargarse (obligatoriamente) son las siguientes:
Si no queremos hacer uso de alguna de ellas, debemos declararlas igualmente, simplemente, sin ningún código dentro.
Se activa si se pulsa un botón y no se mantiene pulsado: public void mouseClicked(MouseEvent e)
Se activa cuando el mouse entra en el Panel: public void mouseEntered(MouseEvent e)
Se activa cuando el mouse sale del Panel: public void mouseExited(MouseEvent e)
Se activa si se pulsa un botón y sí se mantiene pulsado: public void mousePressed(MouseEvent e)
Se activa cuando se suelta el botón presionado previamente (análoga de mousePressed): public void mouseReleased(MouseEvent e)
Se activa cuando arrastramos el mouse con un botón pulsado: public void mouseDragged(MouseEvent e)
Se activa cuando se produce un movimiento del mouse: public void mouseMoved(MouseEvent e)
La variable e (MouseEvent) se pasa automáticamente a la función en cuanto se produce el evento y contiene propiedades interesantes:
Devuelven la posición x,y del mouse:
e.getX();
e.getY();
Devuelve el botón pulsado (Posibles valores: e.BUTTON1, e.BUTTON2, e.BUTTON3)
e.getButton();
Y algunas otras más que, sinceramente, no he usado, pero basta con echarle un vistazo en el J2SE 1.5 API a la clase MouseEvent.
Básicamente lo que he explicado es lo necesario para implementar el control del mouse y como se puede observar, es bastante sencillo. Probad a hacer un println con las coordenadas del mouse con alguna propiedad y veréis como funciona automágicamente.
Por supuesto, si tenéis alguna consulta no dudéis en preguntarlo. Además de ayudaros a vosotros mismos, quizá ayudéis a alguien que venga más tarde.
Referencias:
Programando en Java (III) - Panel y Graphics: http://www.gra2.com/article.php/20050320211027456
Programando en Java (II) - XML: http://www.gra2.com/article.php/20050228222237484
Programando en Java (I) - Thinlet: http://www.gra2.com/article.php/20050214225825123
Saludos,
Dani.

