Los manejadores de eventos pueden ser ejemplares de cualquier clase. Siempre que una clase implemente el interface de oyente de eventos, sus ejemplares pueden manejar eventos. En todo programa que tenga un manejador de eventos, veras tres trozos de código:
public class MiClase implements ActionListener {
someComponent.addActionListener(instancedeMiClase);
public void actionPerformed(ActionEvent e) {
...//código que reacciona a la acción...
}
Puedes encontrar el programa completo en Beeper.java. Aquí sólo el código que implementa el manejo de eventos para el botón:
public class Beeper ... implements ActionListener {
...
//Donde ocurre la inicialización:
button.addActionListener(this);
...
public void actionPerformed(ActionEvent e) {
...//Hace un sonido Beep...
}
}
¿No es sencillo? La clase Beeper implementa el interface ActionListener, que contiene un método:
actionPerformed.
Cómo Beeper implementa ActionListener, un objeto Beeper puede registrarse como oyente de los eventos de acción que generen los botones. Una vez que Beeper ha sido registrado utilizando el método addActionListener del button, el método actionPerformed del Beeper es llamado cada vez que se pulsa el botón.
El siguiente applet ofrece un ejemplo de utilización de múltiples oyentes por objeto. El applet contiene dos funtes de eventos (ejemplares de Button y dos oyentes de eventos. Uno de los oyentes (un ejemplar de la clase llamada MultiListiner escucha los eventos de los dos botones. Cuando recibe un evento, añade el "comando de acción" del evento (el texto de la etiqueta del botón) en la parte superior del área de texto. El segundo oyente (un ejemplar de la clase llamada Eavesdropper) escuchas los eventos de uno sólo de los botones. Cuando recibe un evento, añade el comando de acción en la parte inferior del área de texto.
Puedes encontrar el programa completo en MultiListener.java. Aquí sólo tienes el código que implementa el manejo de eventos para el botón:
public class MultiListener ... implements ActionListener {
...
//donde ocurra la inicialización:
button1.addActionListener(this);
button2.addActionListener(this);
button2.addActionListener(new Eavesdropper(bottomTextArea));
}
public void actionPerformed(ActionEvent e) {
topTextArea.append(e.getActionCommand() + "\n");
}
}
class Eavesdropper implements ActionListener {
...
public void actionPerformed(ActionEvent e) {
myTextArea.append(e.getActionCommand() + "\n");
}
}
En el código anterior, tanto MultiListener como Eavesdropper immplementan el interface ActionListener y se registran como oyentes de acción utilizando el método addActionListener de la clase Button.
La implementación del método actionPerformed en ambas clases es similar: sólo añaden el comando de acción al área de texto.
El siguiente applet muestra un rectángulo elevado y un área de texto. Cuando ocurre un evento delratón -- un click, pulsación, liberación, entrar o salid -- dentro del área del rectángulo (BlankAreaMouseDemo), el área de texto muestra la cadena que describe el evento.
Puedes encontrar el programa completo en MouseDemo.java. Aquí sólo está el código que implementa el manejo de eventos:
public class MouseDemo ... implements MouseListener {
...
//Donde ocurra la inicialización:
//Registra lo eventos del ratón en blankArea y applet (panel).
blankArea.addMouseListener(this);
addMouseListener(this);
}
public void mousePressed(MouseEvent e) {
saySomething("Mouse button press", e);
}
public void mouseReleased(MouseEvent e) {
saySomething("Mouse button release", e);
}
public void mouseEntered(MouseEvent e) {
saySomething("Cursor enter", e);
}
public void mouseExited(MouseEvent e) {
saySomething("Cursor exit", e);
}
public void mouseClicked(MouseEvent e) {
saySomething("Mouse button click", e);
}
void saySomething(String eventDescription, MouseEvent e) {
textArea.append(eventDescription + " detected on "
+ e.getComponent().getClass().getName()
+ ".\n");
textArea.setCaretPosition(maxInt); //hack to scroll to bottom
}
}
Podrás ver el código explicado en Implementar un oyente del Ratón.