5.4 EVENTOS DE RATÓN

 

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