2010-09-01 11 views
6

Al definir el comportamiento de un simple clic en un JButton, ¿cuál es la forma correcta de hacerlo? Y, ¿cuál es la diferencia?addMouseListener o addActionListener o JButton?

JButton but = new JButton(); 
but.addActionListener(new ActionListener() {   
    public void actionPerformed(ActionEvent e) { 
     System.out.println("You clicked the button, using an ActionListener"); 
    } 
}); 

o

JButton but = new JButton(); 
but.addMouseListener(new java.awt.event.MouseAdapter() { 
    public void mouseClicked(java.awt.event.MouseEvent evt) { 
     System.out.println("You clicked the button, using a MouseListenr"); 
    } 
}); 

Respuesta

6

MouseListener es un detector de eventos de bajo nivel en Swing (y AWT por cierto).

ActionListener es de nivel superior y se debe utilizar.

Mejor que ActionListener sin embargo, uno debe usar un javax.swing.Action (que en realidad es un ActionListener).

El uso de un Action permite compartirlo entre varios widgets (por ejemplo, JButton, JMenuItem ...); no solo comparte el código que se activa cuando se presiona el botón/menú, sino que también se comparte el estado, en particular el hecho de si la acción (y sus widgets asociados) está habilitada o no.

1

Usted debe ser capaz de presionar ese botón con el teclado también. Entonces, si agrega solo el oyente del mouse, no obtendrá el evento "presionar" si usa el teclado.

Iría para el oyente de acción, es más claro.

0

Un ActionListener registrado se invoca cuando el botón desencadena un evento de acción, el MouseListener se invoca cuando el widget detecta un clic del mouse.

En su ejemplo, ambos enfoques muestran el mismo comportamiento cuando utiliza un mouse para hacer clic en el botón. Pero concéntrese en el botón y presione SPACE, esto debería desencadenar un evento de acción y desencadenar el Oyente de acción pero no el oyente del mouse.

Se recomienda utilizar el ActionListener en los botones; de lo contrario, no podrá controlar la aplicación con un teclado o tendrá la necesidad de agregar otro detector de eventos clave.

-2

Si desea hacer algo cuando se hace clic en un Jbutton, el oyente de acción es mejor porque el oyente no reconoce que se hace clic en un botón si el usuario presiona el mouse en un JButton y luego mueve el mouse un poco poco antes de soltar el botón del mouse mientras permaneces dentro del botón todo el tiempo, pero el oyente de acción sí lo hace. MouseListener requiere que los clics del mouse no tengan movimiento entre la pulsación del mouse y la liberación del mouse, que no es el caso para mis usuarios.