Los componentes Java utilizan el modelo de delegación de eventos para gestionar la comunicación entre objetos como hemos visto. Para poder implementar la gestión de eventos necesitabas varias cosas:
1-. Crearemos una clase que implemente los eventos. Esta clase hereda de java.util.EventObject.
Para continuar con nuestro ejemplo, vamos a añadir a nuestro proyecto, una nueva clase con el nombre FinCuentaAtrasEvent que herede de la clase java.util.EventObject
El código de esta clase quedaría de la siguiente manera:
import java.util.EventObject;
public class FinCuentaAtrasEvent extends EventObject{ public FinCuentaAtrasEvent(Object
source) {
super(source);
} }
2-. Debemos de definir una interfaz que defina los métodos a usar cuando se genere el evento. Implementa java.util.EventListener.
Para continuar con nuestro ejemplo, procederemos a añadir dentro de la clase TemporizadorBean.java una nueva interfaz con el nombre FinCuentaAtrasEvent. En este caso la gestión del evento se hará a través del método capturarFinCuentaAtras.
El código necesario para la definición de la interface sería el siguiente:
package temporizador;
public interface FinCuentaAtrasListener {
public void capturarFinCuentaAtras(FinCuentaAtrasEvent ev);
}
3-. Añadiremos dos métodos, addEventoListener y removeEventoListener que permitan al componente añadir oyentes y eliminarlos. En principio se deben encargar de que pueda haber varios oyentes. En nuestro caso sólo vamos a tener un oyente, pero se suele implementar para admitir a varios. Estos métodos deben de añadirse dentro de la clase que estemos utilizando para definir el componente.
Siguiendo con nuestro ejemplo, accedemos a la clase TemporizadorBean.java. Añadiremos los métodos addFinCuentaAtrasListener y removeFinCuentaAtrasListener. El código que debemos de añadir es el siguiente:
public void addFinCuentaAtrasListener(FinCuentaAtrasListener receptor){
this.receptor = receptor;
}
public void removeFinCuentaAtrasListener(FinCuentaAtrasListener receptor){
this.receptor=null;
}
4-. Implementar el método que lanza el evento, asegurándonos de todos los oyentes reciban el aviso. En este caso lo que se ha hecho es lanzar el método que se creó en la interfaz que describe al oyente.
En el ejemplo, modificaremos el método actionPerformed de la clase TemporizadorBean.java para que cuando el temporizador llegue a cero, lance el evento. El código de este método una vez que lo modifiquemos quedaría de la siguiente manera:
public void actionPerformed(ActionEvent e) { setText(Integer.toString(tiempo));
repaint(); tiempo--; if(tiempo == 0){ setActivo(false); receptor.capturarFinCuentaAtras(
new FinCuentaAtrasEvent(this)); } }
Finalmente el código de la clase componente queda como aparece en el siguiente enlace: