Events
Los componentes, ya sean personalizados o parte del marco, soportan el manejo de eventos. Puedes agregar oyentes de eventos para capturar varios tipos de eventos, como interacciones del usuario, cambios en el estado u otros eventos personalizados. Estos oyentes de eventos se pueden usar para activar acciones o comportamientos específicos en respuesta a los eventos.
En el ejemplo a continuación, se está agregando un evento utilizando cada uno de los tres métodos soportados: expresiones lambda, clases anónimas y referencias a métodos.
Agregar eventos
Agregar un oyente de eventos es posible usando uno de los siguientes patrones donde:
-
myComponentes el componente al que deseas adjuntar el oyente de eventos. -
addEventListenerse reemplaza con el método específico del evento. -
EventListenerse reemplaza con el tipo de evento que se está escuchando.
myComponent.addEventListener(e -> {
//Ejecutado cuando se dispara el evento
});
//O
myComponent.addEventListener(new ComponentEventListener<EventListener>() {
@Override
public void onComponentEvent(ComponentEvent e){
//Ejecutado cuando se dispara el evento
}
});
//O
myComponent.addEventListener(this::eventMethod);
Se han añadido métodos de azúcar sintáctica adicionales, o alias, para permitir la adición alternativa de eventos utilizando el prefijo on seguido del evento, como:
myComponent.onEvent(e -> {
//Ejecutado cuando se dispara el evento
});
Eliminar un evento
Al agregar un oyente de eventos, se devolverá un objeto ListenerRegistration. Esto se puede usar, entre otras cosas, para eliminar el evento más adelante.
//Agregando el evento
ListenerRegistration listenerRegistration = myComponent.addEventListener(e -> {
//Ejecutado cuando se dispara el evento
});
//Eliminando el evento
listenerRegistration.remove();
Usando la carga útil del evento
Es importante notar que los eventos a menudo vienen con una carga útil, que contiene información adicional relacionada con el evento. Puedes utilizar eficientemente esta carga útil dentro del controlador de eventos para acceder a datos relevantes sin hacer viajes innecesarios entre el cliente y el servidor. Al hacerlo, puedes mejorar el rendimiento de tu aplicación.
El siguiente fragmento de código consulta el componente para obtener información que, para los propósitos de nuestra demostración, ya está incluida en la carga útil del evento, representando código ineficiente:
myComponent.addEventListener(e -> {
// Acceder a datos del componente
String componentText = e.getComponent().getText();
//O si el componente es accesible dentro del ámbito de la función
String componentText = myComponent.getText();
// Usa el componentText para realizar otras acciones.
});
En su lugar, utilizando la carga útil del método, que para el ejemplo incluye el texto del componente, se evita un viaje:
myComponent.addEventListener(e -> {
// Acceder a datos de la carga útil del evento
String componentText = e.getText();
// Usa el componentText para realizar otras acciones.
});
Este enfoque minimiza la necesidad de consultar el componente para obtener información, ya que los datos están disponibles en la carga útil del evento. Al seguir esta práctica eficiente de manejo de eventos, puedes mejorar el rendimiento y la capacidad de respuesta de tus componentes. Para más información, puedes consultar Interacción Cliente/Servidor.
Ejemplo
A continuación se muestra una demostración que muestra la adición de un ButtonClickEvent a un Button. Este Button también utiliza información que viene con la carga útil del evento para mostrar información en la pantalla.
Mostrar Código
- Java