3.5. Eventos y Oyentes

Vaadin ofrece un modelo de programación orientada a eventos para el manejo de la interacción del usuario. Cuando un usuario hace algo, como hacer clic en un botón o seleccionar un elemento, la aplicación necesita tener conocimiento de esto. Muchos frameworks basados en interfaz de usuario Java siguen el modelo Evento-Oyente (conocido tambien como el modelo de diseño Observador) para comunicar la entrada de datos por el usuario a la lógica de la aplicación. Vaadin también lo hace. El modelo de diseño implica dos clases de elementos: un objeto que genera ("dispara" o "emite") eventos y un número de oyentes que escuchan los eventos. Cuando ocurre un evento, el objeto envía una notificación de ello a todos los oyentes. En un caso típico, sólo hay un oyente.

Los eventos pueden servir para muchos propósitos. En Vaadin, el propósito habitual de los eventos es manejar la interacción del usuario en una interfaz de usuario. La administración de sesiones puede requerir eventos especiales, tales como el tiempo-muerto, cuyo caso el evento es en realidad la falta de interacción del usuario. El tiempo-muerto es un caso especial de eventos programados o previstos, donde un evento ocurre en una fecha y hora específica o cuando se ha cumplido una hora. Las bases de datos y otros tipos de comunicación asincrónica también pueden causar eventos.

Para recibir eventos de un tipo en particular, una aplicación debe registrar un objeto oyente con el origen del evento. Los oyentes son registrados en los componentes con el addListener(). El método tiene una versión genérica definida en el nivel de AbstractComponent, la clase base de todos los componentes.

La mayoría de los componentes que tienen eventos relacionados definen su propia clase de evento y sus respectivas clases oyentes. Por ejemplo, Button tiene eventos Button.ClickEvent, el cual puede ser escuchado a travéz de la interfaz Button.ClickListener.

A continuación, manejamos los clics de button con un oyente implementado como una clase anónima:

final Button button = new Button("Presionalo!");

button.addListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        button.setCaption("Lo presionaste!");
    }
});

La Figura 3.3, "Diagrama de Clases de un Oyente de Clic de Button" ilustra un ejemplo donde una clase específica de la aplicación hereda la interfaz Button.ClickListener capaz de escuchar eventos clic de button. La aplicación debe crear instancias de la clase oyente y registrarla con addListener(). Cuando ocurre un evento, el evento de un objeto es instanciado, en este caso un ClickEvent. El evento del objeto conoce el componente de interfaz de usuario relacionado, en este caso Button.

Figura 3.3. Diagrama de Clases de un Oyente de Clic de Button

En los viejos tiempos de programación en C, las retrollamadas a funciones llenaron en gran parte la misma necesidad como los oyentes lo hacen ahora. En lenguajes orientados a objetos, sólo tenemos clases y métodos, no funciones, por lo que la aplicación tiene que proporcionar una clase interface en lugar de un puntero a una retrollamada de función al framework. Sin embargo, Vaadin también admite la definición de un método como un oyente, utilizando el wrapper MethodListener.

Tenga en cuenta que muchas interfaces oyentes heredan de la superinterface java.util.EventListener, pero generalmente no es necesario heredarlo.

La Sección 4.4, "Controlar Eventos con Oyentes" explica en detalle como manejar eventos en la práctica.



Anterior
3.4. Motor del Lado del Cliente
Siguiente
Capítulo 4. Escribir una Aplicación Web

No hay comentarios.:

Publicar un comentario