2010-01-30 31 views
7

Tengo el siguiente código:¿Qué es addActionListener?

JButton button = new JButton("Clear"); 
button.addActionListener(this); 

Por lo que yo entiendo creo un botón en el que está escrito "Borrar". Luego tengo que asociar una acción con este botón (lo que sucederá si se presiona el botón) y se hace por addActionListener. ¿Es correcto?

Pero lo que no entiendo es dónde se especifica la acción. Al presionar el botón se debe borrar el área de texto y, por lo que yo entiendo, debe haber un código que borre el área de texto. Pero en el ejemplo dado, solo hay "esto" en los argumentos del addActionListener().

¿Cómo sabe el programa que debe borrar el área de texto cuando se presiona el botón?

Si es necesario, se proporciona el código completo here.

Respuesta

12

Un ActionListener es un mecanismo de devolución de llamada. Siempre que se agregue un control al fuego ActionEvent, se invocará el método public void actionPerformed(ActionEvent e).

Lo que no entiendo es dónde se llama actionPerformed. Veo que está definido dentro de la clase, pero no hay lugar donde se llame a este método.

Esto es llamado por los mecanismos internos del componente UI. Conceptualmente, se puede pensar en el código buscando un poco como esto:

public class Button { 
    private final List<ActionListener> listeners = new ArrayList<ActionListener>(); 

    public void addActionListener(ActionListener l) { 
    listeners.add(l); 
    } 

    public void click() { 
    ActionEvent event = new ActionEvent(this, 0, "click"); 
    for (ActionListener l : listeners) { 
     l.actionPerformed(event); 
    } 
    } 
} 
1

Llama a button.addActionListener(this), porque this implementa la interfaz ActionListener. Cuando se hace clic en el botón, se llama al método actionPerformed(ActionEvent e) (definido por la interfaz e implementado por su clase).

+0

Lo que no entiendo es donde se llama a actionPerformed. Veo que está definido dentro de la clase, pero no hay lugar donde se llame a este método. – Roman

0

El generador de eventos cuenta sobre el objeto que puede manejar sus eventos Los generadores de eventos tienen un método; - addActionListener (referencia al objeto de clase Handler) Por ejemplo,

JButton b1=new JButton("My Button"); 
b1.addActionListener(this); // Please note listener and generator are same class 

Desde controlador de eventos está en mismo objeto que contiene botón, lo que tenemos que utilizar this para pasar la referencia.

0

Básicamente, el mecanismo de manejo de eventos de la interfaz de usuario es la JVM colas eventos, y cada tipo de evento tiene sus suscriptores. Cuando se activa un evento, al igual que se hace clic en el botón, la JVM delegará el procesamiento al suscriptor del evento. Y esta clase de suscriptor tiene que definir el método, o el manejador de eventos, para procesar el evento.

En su caso, al llamar al button.addActionListener (this); el código en realidad suscribe esta instancia KeyEventDemo al evento de tipo clic. Luego, cuando se haga clic en el botón, se activará el método de ActionPerformed de KeyEventDemo.