Saltar la navegación

8.4.- Gestión de eventos.

Ilustración de un esquema de formado por cinco figuras distribuidas de la siguiente manera: En la parte izquierda un óvalo de fondo rosado, en cuyo interior se puede leer “GESTIÓN DE EVENTOS”. A su derecha se abre una figura de llave y encontramos cuatro rectángulos de borde redondeado y fondo verde, distribuidos de arriba a abajo. En el  rectángulo situado en la parte superior se puede leer en su interior “CLASE QUE IMPLEMENTE LOS EVENTOS”. Debajo de éste, otro rectángulo, en cuyo interior se puede leer “INTERFAZ QUE DEFINA LOS MÉTODOS”. Debajo de éste, otro en cuyo interior se puede leer “DOS MÉTODOS: AÑADIR Y ELIMINAR OYENTES”. Debajo de éste, el último rectángulo, en cuyo interior se puede leer “IMPLEMENTAR EL MÉTODO QUE GENERA EL EVENTO”.
Verónica Cabrerizo. (Elaboración propia)

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 addFinCuentaAtrasListenerremoveFinCuentaAtrasListener. 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:

Clase TemporizadorBean.java

Autoevaluación

Pregunta

¿Qué elementos interviene en la implementación de un evento?

Respuestas

Una clase que define el evento.

Una interfaz que define los métodos a implementar.

Una clase que defina el evento y una interfaz que defina los métodos a implementar.

Retroalimentación