domingo, 2 de marzo de 2014

Ejemplo eventos del mouse en Java

En nuestra secuencia Java Swing no podemos dejar pasar un tema muy importante cuando trabajamos con interfaces graficas......los eventos son fundamentales para este tipo de aplicaciones, por esa razón en está entrada veremos como funcionan los eventos del Mouse con un ejemplo básico pero útil para futuros desarrollos....


Que son?

Los eventos son básicamente las acciones que suceden al ejecutar o realizar alguna invocación..........a?........ un evento es una acción que podemos controlar cuando por ejemplo se ejecuta algún proceso, si ingresamos a cierto componente, presionamos un botón, movemos el mouse etc internamente el sistema identifica que es lo que se está haciendo, si hacemos clic, presionamos una tecla, movemos el mouse, todas esas son acciones que pueden ser identificadas y controladas.......

En Java estos eventos son conocidos como Listeners o escuchadores, cuando trabajamos con esto a la vez estamos aplicando conceptos de POO como es el trabajo con interfaces (en este enlace trabajamos con interfaces), ya que para poder hacer uso de cualquier tipo de evento debemos implementar la interface adecuada que nos permite realizar el proceso....en este ejemplo al trabajar con eventos del mouse implementaremos la interface MouseListener, que nos provee una serie de métodos importantes para controlar las acciones del ratón...

El Ejemplo.



Nuevamente como es costumbre, el ejemplo es muy simple, validaremos el funcionamiento mas común sobre los eventos del mouse.........tan solo vamos a presentar una ventana con un titulo y Botón central, el cual nos permitirá evaluar cuales son las acciones ejecutadas sobre el.....adicionalmente se le vincularán eventos al titulo para probar que estos no solo son aplicados a los botones sino a cualquier componente, ya que los eventos a utilizar dependen exclusivamente del mouse..........

La Aplicación.

El sistema consta de 2 clases, una clase principal que se llamará  Aplicacion.java que será la encargada de inicial el programa, también tenemos la clase Ventana.java que tendrá toda la parte gráfica de la ventana principal.

Aplicacion.java

Esta clase como se mencionó tan solo tendrá la instancia de la clase ventana y permitirá el llamado de la misma, como es común en los ejemplos presentados, se realiza así por organización....
public class Aplicacion {
 public static void main(String args[]) {
  Ventana ventana;
  ventana = new Ventana();
  ventana.setVisible(true);
 }
}

Ventana.Java

Esta clase representa la ventana principal del sistema, como vemos implementa la interface MouseListener que permite el uso de los métodos mouseClicked(), mousePressed(), mouseReleased(), mouseExited(), mouseEntered(), los cuales capturan los eventos para cuando se hace clic, se presiona, se suelta, se sale, o se entra en algún componente respectivamente.....
class Ventana extends JFrame implements MouseListener {
 JLabel etiqueta1, etiqueta2;
 JLabel labelTitulo;
 JButton boton1;

 public Ventana() {
  setLayout(null);
  /**Propiedades del Label, lo instanciamos, posicionamos y
   * activamos los eventos*/
  labelTitulo= new JLabel();
  labelTitulo.setText("Eventos del Mouse");
  labelTitulo.setFont(new java.awt.Font("Comic Sans MS", 0, 28));
  labelTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
  labelTitulo.setBorder(javax.swing.BorderFactory.createBevelBorder
      (javax.swing.border.BevelBorder.LOWERED));
  labelTitulo.setBounds(40, 10, 300, 40);
  labelTitulo.addMouseListener(this);
  
  etiqueta1 = new JLabel();
  etiqueta1.setBounds(10, 160, 190, 20);
  etiqueta2 = new JLabel();
  etiqueta2.setBounds(10, 180, 190, 20);
  
  boton1 = new JButton();
  boton1.setBounds(110, 75, 150, 75);
  boton1.setText("Presioname");
  boton1.addMouseListener(this);
    
  add(labelTitulo);
  add(etiqueta1);
  add(etiqueta2);
  add(boton1);
  
  setTitle("CoDejaVu Eventos del Mouse");
  setSize(400, 240); 
 }

 public void mouseClicked(MouseEvent evento) {
  if (evento.getSource() == boton1){
   etiqueta1.setText("Hizo clic en mi botón");
  }
  if (evento.getSource() == labelTitulo){
   etiqueta1.setText("Hizo clic en el Titulo");
  }
 }

 public void mousePressed(MouseEvent evento) {
  etiqueta1.setText("");
  if (evento.getSource() == boton1){
   etiqueta2.setText("Presiono el botón");
  }
  if (evento.getSource() == labelTitulo){
   etiqueta2.setText("Presiono el Titulo");
  }
 }

 public void mouseReleased(MouseEvent evento) {
  if (evento.getSource() == boton1){
   etiqueta2.setText("Libero el botón");
  }
  if (evento.getSource() == labelTitulo){
   etiqueta2.setText("Libero el Titulo");
  }
 }

 public void mouseExited(MouseEvent evento) {
  if (evento.getSource() == boton1){
   etiqueta1.setText("Salio del botón");
  }
  if (evento.getSource() == labelTitulo){
   etiqueta1.setText("Salio del Titulo");
  }
  etiqueta2.setText("");
 }

 public void mouseEntered(MouseEvent evento) {
  if (evento.getSource() == boton1){
   etiqueta1.setText("Entro a mi botón");
  }
  if (evento.getSource() == labelTitulo){
   etiqueta1.setText("Entro al Titulo");
  }
  etiqueta2.setText("");
 }
}

Como vemos cada uno de los métodos de la interface MouseListener permite identificar cual es el componente al que se le asigna el evento y basado en eso interpreta cual es el mensaje que se debe mostrar en pantalla.

Es importante tener muy presente que se debe indicar que componentes van a hacer uso de los eventos del mouse, esto mediante el uso de addMouseListener(this), por ejemplo para el botón se pone:
labelTitulo.addMouseListener(this);

diciendo así que el botón va a escuchar los eventos del ratón, si esta linea se omite, el boton no podria interpretar los eventos......... y listo!!!

un ejemplo simple, rápido y fácil de entender.....mas adelante veremos otros eventos comunes pero con el uso del teclado, espero que les pueda servir ;)



También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

17 comentarios:

  1. Hola buen aporte sigue asi haber si puedes subir algunos ejemplos sobre Listas y Archivos !! seria de gran ayuda Saludz

    ResponderEliminar
    Respuestas
    1. Hola, gracias por comentar y si señor, ando preparando algunos temas, el problema es el tiempo pero espero salirme de algo para continuar ;)

      Eliminar
  2. buen aporte si subieras tambien eventos de teclado estaria genial

    ResponderEliminar
    Respuestas
    1. Hola, Jose, listo el ejemplo, ya lo puedes consultar..... un saludo y gracias por comentar ;)

      Eliminar
  3. Muchas gracias por el aporte, me sirvio mucho, espero poder seguir tus publicaciones...

    ResponderEliminar
  4. Muy bueno pero una duda, no puedo asiganar un listener directamente a un boton asignandole el tipo de evento y el nombre d ela funcion que quiero que ejecute?

    Por ejemplo algo asi como
    miBoton1.addMouseListener(Event.mouseClicked,onMiBoton1Clicked);

    private static onMiBoton1Clicked(mouseClicked eventObject){

    }

    Encuentro el sistema de ventos de java muy complicado

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
  5. Buenisimo, me ayudo a lograr el objetivo que necesitaba realizar, muy bueno, ojala podas subir mas informacion de este tipo

    ResponderEliminar
  6. muy buen aporte, preguntas como seria la estructura algorítmica del evento?

    ResponderEliminar
  7. hola he estado buscando en eventos del mouse la opcion donde al ubicar el cursor sobre un label o un button o donde creemos el evento me aparezca un mensaje flotando al lado y no lo he podido encontratar te agradezco si me puedes colaborar

    ResponderEliminar
    Respuestas
    1. Hola, intenta con el boton.setTooltipText("Mensaje Emergente");

      Eliminar
  8. Quisiera saber si es posible realizar algo así.

    public void actionPerformed (ActionEvent e)
    {
    Object fuente = e.getSource();
    fuente.setText(“Probado”); fuente.setEnabled(true);
    }

    Para de esta forma usarlo para varios componentes.

    ResponderEliminar
  9. Buen aporte, me gustaría saber por favor cómo abrir un jframe desde una atable con este veneto, o si es posible? he intentado con mouseClicked y no me he podido.
    Gracias por la colaboración.

    ResponderEliminar
  10. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  11. hola, disculpa en este código utilizaste el JLabel, se puede utilizar
    Image imag1 =new ImageIcon(getClass().getResource("imagen1.jpg")).getImage();
    enbes de JLabel, osea en bes de dar click en un JLabel que sea en la imagen.
    me ayudarías bastante si me respondieras esta duda

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!