Programando en Java: Control del Mouse - MouseListener (IV)

Después de acabar de dibujar los Panels (Frames, Canvas...) del artículo anterior, era necesario implementar el control de movimiento del Mouse, generar eventos al mover el mouse, hacer click o arrastrarlo, por ejemplo.

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.



 


Trackback

Trackback URL for this entry:
http://www.gra2.com/trackback.php/20050412215456135

No trackback comments for this entry.

Comments

Post a comment

Bueno. Antes que nada quiero decirles que esta pagina esta muy completa en informacion y espero que no pierda el contenido. Gracias.

Anonymous on Thursday, April 14 2005 @ 05:52 PM CEST Reply | #

Buenas,

agradecerte el articulo q has expuesto, me ha ido genial.

Tb comentar q sobre la classe q has declarado se puede dividir en dos del tipo extends MouseAdapter y extends MouseMotionAdapter

Gracias por todo!!

Nos vemos!!

Anonymous on Saturday, May 21 2005 @ 07:06 PM CEST Reply | #

A mi no me funciona, me pide que cree la clase mouse.

A ver si me das una mano en esto:

Tengo en una ventana 2 paneles y quiero sacar un componente panel del 1º panel y agregarlo en otro componente panel que se encuentra en el panel 2, como hago?

Anonymous on Thursday, July 09 2009 @ 09:43 PM CEST Reply | #

Exelente, esto me salvó la vida en un proyecto que tenia que presentar...gracias

Anonymous on Friday, October 23 2009 @ 02:17 PM CEST Reply | #

Hola muy buena la explicación, para obtener los pixeles de una imagen al mover el mouse sobre ella còmo podría hacer', estoy utilizando mousemove y tengo ya los pixeles de la imagen , pero como asocio el pixel o el valor a ese evento de mouse?, podrías explicarme.

Anonymous on Thursday, December 03 2009 @ 10:38 PM CET Reply | #

ajs

Anonymous on Thursday, August 11 2011 @ 04:11 AM CEST Reply | #

Te falta algun ejemplo simple pero que ayude

Anonymous on Friday, November 11 2011 @ 04:47 PM CET Reply | #

hola a todos, tengo una inquietud sobre algo que supongo corresponde a eventos. Lo que sucede es que quiero que al poner el cursor sobre un texto, que muestre un mensaje con lo que dice el texto, pues en ocasiones cuando se trabaja con combos, no se alcanza a apreciar el texto por completo...Agradezco de antemano su colaboración...
PD: Trabajo con java

Jp on Thursday, January 26 2012 @ 03:08 AM CET Reply | #

mmm...una pregunta ...tu sabes como poner implements MouseListener, MouseMotionListener en jcreator pero con extends JApplet implements ActionListener juntos...?? O.O

Anonymous on Sunday, September 02 2012 @ 09:39 PM CEST Reply | #

Search



About

newton.gra2.com is a blog about technology, opinion and random thoughts written by Daniel Alvarez, a computer engineer currently living in Zurich, Switzerland.

Topics

News (20/0)
Manuals (24/0)
Security (7/0)
Music (3/0)
Weeklog (1/0)
Personal (34/0)
Photos (3/0)
Opinion (14/0)
Windows (5/0)

Blogroll

Pros i contres (Jordi)
Entrepa de fusta (Oriol)
Spaghetti Code (Isaac)
Made in net (Eric)
Nogare (Juan)
Blog de Isaac Jimenez
Web d'en Jaume Benet
Montcada Wireless (Fran)
Blog d'en Ricard Forniol
Angela Fabregues
in.solit.us

Libertad Digital
FOX News
The Wall Street Journal
The Washington Times
The Jerusalem Post

Michelle Malkin
Eurabian News
Nihil Obstat
Barcepundit
Expose the left
Davids Medienkritik
Johan Norberg
Ayaan Hirsi Ali

User Functions

:

:


Lost your password?

Latest posts

Stories

No new stories

Comments last 2 days

No new comments

Trackbacks last 2 days

No new trackback comments

Links last 2 weeks

No recent new links