Hola a todos, bienvenidos a un nuevo post, en este vamos a ver los eventos de ratón. El ratón desencadena varios eventos como pulsar el botón izquierdo, el botón derecho, mover la rueda, pasar con el puntero sobre un objeto como una ventana o botón. Para ello hay que conocer la interface MouseListener
Tiene una serie de métodos obligados a declararlos todos si utilizamos esta interface, estos métodos reciben un parámetro de tipo MouseEvent por lo que estamos obligados también a utilizar:
getX y getY sirven
para conocer la posición exacta donde se encuentra el ratón en un momento
determinado, getModifiersEx detectar si se ha utilizado
el botón izquierdo, derecho o la rueda y getClickCount cuantos
clics ha hecho el usuario.
Visto todo esto es recomendable que vayáis a
la API de Java para obtener más
información.
Visto todo esto creamos una nueva clase con
el siguiente código:
package event;
import
javax.swing.JFrame;
import javax.swing.JPanel;
public class EventosRaton {
public static void main(String[] args) {
MarcoRaton mimarco=new MarcoRaton();
mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MarcoRaton
extends JFrame{
public MarcoRaton() {
setVisible(true);
setBounds(700, 300, 600, 450);
}
}
Es un código que lo estamos viendo en estos
últimos apartados por lo que no es conveniente explicar.
A continuación de la clase tenemos que
crearnos otra clase que implemente la interface MouseListener:
class EventosDeRaton implements MouseListener
{
}
Estamos obligados a crear todos los métodos
para que no nos dé ningún error:
class EventosDeRaton implements MouseListener {
@Override
public void
mouseClicked(MouseEvent e) {
// TODO
Auto-generated method stub
}
@Override
public void
mousePressed(MouseEvent e) {
// TODO
Auto-generated method stub
}
@Override
public void
mouseReleased(MouseEvent e) {
// TODO
Auto-generated method stub
}
@Override
public void
mouseEntered(MouseEvent e) {
// TODO
Auto-generated method stub
}
@Override
public void
mouseExited(MouseEvent e) {
// TODO
Auto-generated method stub
}
}
Queremos que nos imprima un mensaje en la
consola cuando hagamos clic en el botón del ratón, en el método mouseClicked crearemos
un System.out con el mensaje que queremos que aparezca:
public void
mouseClicked(MouseEvent e) {
System.out.println("Has
hecho clic con el ratón");
}
Tenemos que determinar cuál es nuestro objeto
oyente, en este caso lo único que tenemos es un marco, no tenemos botones, ni
menús… por lo que el objeto oyente va a ser el marco. En la clase MarcoRaton
tenemos que crear una instancia perteneciente a la clase que implementa MouseListener y
después con el método addMouseListener poner a la escucha
nuestro marco:
class MarcoRaton
extends JFrame{
public MarcoRaton() {
setVisible(true);
setBounds(700, 300, 600, 450);
EventosDeRaton raton = new EventosDeRaton();
addMouseListener(raton);
}
}
Si probamos la aplicación:
Lo primero, ha aparecido la ventana si
hacemos un clic con el ratón sobre la ventana, en consola nos aparece el
mensaje “Has hecho clic con el ratón”.
Vamos a probar los otros métodos:
public void mousePressed(MouseEvent
e) {
System.out.println("Has
presionado el botón del ratón");
}
@Override
public void
mouseReleased(MouseEvent e) {
System.out.println("Has
levantado el botón del ratón");
}
Al probar la aplicación el primer método que se va a ejecutar va a ser mousePressed, después mouseReleased y finalmente mouseClicked.
Hay otros dos métodos que sirven para cuando
estamos dentro del marco y cuando salimos sin necesidad de hacer clic en ningún
botón del ratón:
public void mouseEntered(MouseEvent
e) {
System.out.println("Acabas
de entrar");
}
@Override
public void
mouseExited(MouseEvent e) {
System.out.println("Acabas
de salir");
}
Si probamos la aplicación:
En el momento que el puntero del ratón entra
en la ventana ya nos aparece el primer mensaje, en cuanto salimos de la ventana
el segundo mensaje.
Si no queremos utilizar todos los métodos
podemos hacer que en lugar de implementar la interface MouseListener herede
de la clase MouseAdapter y que sobrescriba el método que
queremos utilizar:
class EventosDeRaton extends MouseAdapter {
public void
mouseClicked(MouseEvent e) {
System.out.println("Has
hecho clic con el ratón");
}
}
Los métodos y las constantes de clase de la clase MouseEvent:
Comprobar en qué posición está el ratón,
cuantos clics hemos hecho con el ratón, etc. Vamos a seguir trabajando con la
práctica del post anterior habíamos creado una clase llamada EventosDeRaton que heredaba de la
clase MouseAdapter y dentro de ella creamos un método, si
hacemos esto:
class EventosDeRaton extends MouseAdapter {
public void
mouseClicked(MouseEvent e) {
System.out.println("Coordenada
X: "+e.getX()+" Coordenada Y: "+e.getY());
}
}
Con esto lo que conseguimos es cuando pulsemos con el botón del ratón sobre el marco nos indique por consola exactamente en la posición en la que está el puntero, si lo probamos:
Al hacer clic sobre cualquier parte del marco
nos ha dado la posición en la que se encuentra el puntero tanto en vertical
como en horizontal.
Si queremos saber cuántos clics hacemos con
el ratón lo hacemos de la siguiente manera:
class EventosDeRaton extends MouseAdapter {
public void
mouseClicked(MouseEvent e) {
//System.out.println("Coordenada
X: "+e.getX()+" Coordenada Y: "+e.getY());
System.out.println(e.getClickCount()+"
clics");
}
}
Probamos:
El método es getModifiersEx() nos
indica si hemos pulsado el botón izquierdo, el derecho o si hemos utilizado la
rueda. Para verlo más claro vamos a comentar el método que hemos creado en la
clase EventosDeRaton y nos vamos a
crear uno nuevo:
public void
mousePressed(MouseEvent e) {
System.out.println(e.getModifiersEx());
}
Si probamos la aplicación:
Si utilizo la rueda en consola me aparece el
número 2048, si pulso el botón derecho el número 1024 y el botón izquierdo
4096. Esto son los valores de las constantes de clase. Os recomiendo ir a
la API de Java para saber más
acerca de estos métodos.
Por ejemplo, el valor 4096 su nombre de
variable es BUTTON1_DOWN_MOUSE. Si volvemos al código y escribimos
lo siguiente:
public void
mousePressed(MouseEvent e) {
if(e.getModifiersEx()==1024) {
System.out.println("Has
pulsado el botón izquierdo");
}
}
Probamos:
En el momento que pulsemos el botón izquierdo
sobre el marco nos lo imprimirá en consola. Si en lugar de poner el valor
porque es más difícil memorizarlo podemos escribir el nombre de la variable:
public void
mousePressed(MouseEvent e) {
if(e.getModifiersEx()==MouseEvent.BUTTON1_DOWN_MASK) {
System.out.println("Has
pulsado el botón izquierdo");
}
}
}
Podemos completar el código con el botón
derecho y la rueda:
public void
mousePressed(MouseEvent e) {
if(e.getModifiersEx()==MouseEvent.BUTTON1_DOWN_MASK) {
System.out.println("Has
pulsado el botón izquierdo");
}else if(e.getModifiersEx()==MouseEvent.BUTTON2_DOWN_MASK) {
System.out.println("Has
pulsado la rueda del ratón");
}else if(e.getModifiersEx()==MouseEvent.BUTTON3_DOWN_MASK) {
System.out.println("Has
pulsado el botón derecho");
}
}
Hay otros eventos del ratón y es cuando está
moviendo el ratón o arrastrando (seleccionando) un objeto, para ello se utiliza
la interface MouseMotionListener, esta interface controla el
movimiento del ratón.
Sólo utiliza dos métodos muy sencillos.
Volvemos al código vamos a implementar esta interface a la clase
EventosDeRaton:
class EventosDeRaton implements
MouseMotionListener {
}
Nos aparece el error en el nombre de la clase
EventosDeRaton porque estamos obligados a declarar los dos métodos:
class EventosDeRaton implements
MouseMotionListener {
@Override
public void mouseDragged(MouseEvent e) {
// TODO
Auto-generated method stub
}
@Override
public void
mouseMoved(MouseEvent e) {
// TODO
Auto-generated method stub
}
}
El primer método mouseDragged() es
cuando estamos arrastrando o seleccionando y el método mouseMoved cuando
estamos moviendo el ratón:
class EventosDeRaton implements
MouseMotionListener {
@Override
public void
mouseDragged(MouseEvent e) {
System.out.println("Estas
arrastrando");
}
@Override
public void
mouseMoved(MouseEvent e) {
System.out.println("Estas
moviendo");
}
}
Nos falta poner a la escucha esta clase en
lugar de utilizar el método addMouseListener utilizamos addMouseMotionListener:
addMouseMotionListener(raton);
Con esto ya estaría completo.
Hasta aquí los eventos del ratón. Cualquier
duda me lo podéis hacer llegar a través de los comentarios del blog y entre
todos ayudarnos. Hasta pronto!
5.3 EVENTOS DE TECLADO << >> 5.5EVENTOS DE FOCO
No hay comentarios:
Publicar un comentario