handling event java events listener handler

handling - ¿Cuál es la diferencia entre Event Listeners & Handlers en Java?



result listener in java (11)

En términos generales de Java, hay oyentes y controladores para eventos.
Quiero decir que los uso sin saberlo, cualquiera que esté disponible en la API.

Mi pregunta es, ¿en qué caso usamos oyentes y en qué caso usamos manejadores para eventos?

¿Cual es la diferencia entre ellos? Características?

Busqué razones y no pude encontrar una explicación adecuada para Java.


Conceptualmente son lo mismo: un objeto que realiza alguna acción en respuesta a un evento de IU. Generalmente, en Swing, estos objetos se denominan "manejadores" en el nivel de apariencia (y manejo de eventos de widgets de bajo nivel) y "oyentes" en el nivel de IU más abstracto (donde implementará la lógica de la aplicación) )


Creo que la diferencia es sutil porque un Oyente concreto también es un controlador de eventos o al menos tiene un método que puede considerarse un controlador de eventos. Es decir, un Oyente concreto maneja o gestiona la reacción al evento después de recibir un objeto de evento (del origen del evento) con todas las informaciones útiles sobre el evento que acaba de ocurrir (en el origen del evento). Como este Oyente tiene que implementar una interfaz xxxListener que lo obliga a implementar al menos un método que a su vez es ejecutado por el objeto fuente del evento cuando ocurre el evento, por lo que el Oyente puede ser considerado como un controlador y más precisamente, el método de la interfaz Listener implementada por el objeto Listener puede considerarse el controlador de eventos real. Entonces veo el controlador de eventos como el código que se ejecuta en reacción a un evento. Esto es diferente de un objeto Listener que es un elemento de un concepto más abstracto, como un patrón de diseño Observer. Esta es mi visión personal del tema.


En mi opinión, la diferencia más importante es el hecho de que usamos oyentes por fuente de evento, a diferencia del manejador, que es por tipo de evento.


Es semántica

  • El oyente es la interfaz.
  • Adapter es una clase que implementa una interfaz específica y proporciona una implementación vacía para sus métodos. Esto ayuda si no tiene que implementar todos los métodos de interfaz.
  • Handler implementa varias interfaces o delega llamadas a varias interfaces.

Esta es la forma en que lo veo:

Un oyente espera a que se dispare un evento. Por ejemplo, KeyListener espera KeyEvents, MessageListener espera que los mensajes lleguen a la cola, etc.

El controlador es responsable de manejar el evento. Normalmente, los oyentes y los manejadores van de la mano. Por ejemplo, KeyListener le dice al ExitHandler que "se presionó la letra Q" y el manejador lleva a cabo la lógica, como limpiar los recursos y salir de la aplicación con elegancia. Del mismo modo, un ButtonClickListener le diría al mismo ExitHandler que se hizo clic en el botón "Salir". Entonces, en este caso tienes dos eventos diferentes, dos oyentes diferentes pero un único controlador.


EventHandler se introduce en JavaFX para todos los controles de la interfaz de usuario. Mientras que el Oyente es prestado para Observables, como las propiedades.

The EventHandler es una forma de distinguir los eventos observables y los eventos de la interfaz de usuario.


He intentado dar sentido a toda la información y estoy perdido. He visto Delphi (Pascal), C, C ++, Java ... no hay nada claro. Entonces, después de un mes, este es el problema tal como lo veo. Puedo estar totalmente fuera de la pista, así que por favor dime ... cortésmente, por favor.

Un remitente de evento, un receptor siempre que Sender registre el receptor. Tengo 4 cuadros de diálogo que deben actualizarse cada vez que cambia un archivo (cuyo código de manejo está en otro módulo que los 4 cuadros de diálogo). Consideré actualizar cada uno a la manera antigua, pero luego miré los eventos Delphi y el manejo de mensajes. Veamos:

El archivo F (The Sender) ha terminado de leerse y debe notificar a Dialogs 1..4 el hecho de que ahora hay datos para que se muestren y el usuario juegue con ellos. ¿Qué es lo mejor?

Intente registrar Dialogs 1..4 como oyentes y haga que el Remitente active un Evento OnUpdatedData de alguna manera?

Intente enviar un mensaje a través del sistema, esperando que Dialogs 1..4 lo atrape.

Tenga en cuenta que el evento mantiene las cosas unidas, mientras que los mensajes no ... y es una pena depurar.

Y me pregunto cómo el bloque de código File podrá registrar 4 oyentes (los cuadros de diálogo)?

Lo que estoy viendo es la posibilidad de llamadas en cascada, es decir, quien llama llama a un oyente, quien llama al siguiente ... hasta que llega al final de la cadena. Incluso me pregunto si eso es posible.

Un ejemplo:

Say File F es una lista de idiomas. Ahora, DialogBox 1 hace algo en la lista (agrega un nuevo idioma, por ejemplo); ese cuadro combinado actualiza el archivo F; esto a su vez desencadena un DataUpdatedEvent. los 4 cuadros de diálogo contienen, por ejemplo, TComboBoxes que muestran la lista de idiomas cuando aparecen. Quiero que los 4 cuadros noten el cambio y actualicen sus propios contenidos del cuadro combinado con el Archivo recién actualizado ... sin tener que preocuparse por cómo los cuadros combinados saben que necesitan actualizar sus contenidos. Si funciona como se prevé, el parámetro del remitente se transmitirá y el cuadro de diálogo que activó dataUpdateEvent se omitirá porque ya se actualizará. Después de todo, si un sender = self, entonces continúe con el siguiente evento controlador debe ser fácil de implementar.

Todo eso porque quiero ejercitar mi cerebro ... para prevenir el Alzheimer, no muy exitosamente, podría agregar.


La diferencia más básica es la asociación

  • El oyente está asociado con el Origen del evento (Ej: teclado)
  • El controlador está asociado a un evento (Ej: keydown)

En términos generales, solo habrá un administrador central de manipuladores que gestionará todos los eventos, mientras que en el caso de los oyentes, cada entidad que quiera escuchar tendrá que gestionar su propia colección de oyentes.


No hay una diferencia definida formalmente entre oyentes y manipuladores. Algunas personas probablemente argumentarán que son intercambiables. Para mí, sin embargo, tienen un significado ligeramente diferente.

Un oyente es un objeto que se suscribe para eventos de una fuente. Cf. el patrón del observador Por lo general, puede hacer que muchos oyentes se suscriban para cada tipo de evento y se agregan a través de los métodos de add XyzListener .

Ejemplo: El MouseListener en la API de Java.

Un controlador es un objeto que se encarga de manejar ciertos eventos. Un escenario típico sería proporcionar un controlador para un evento / tarea específico como argumento para un constructor, o establecer el controlador a través de un método set XyzHandler . En otras palabras, generalmente tiene un controlador para cada tipo de evento.

Ejemplo: MemoryHandler en la API de Java.


Un oyente es un objeto que se notifica cuando se produce un evento, y tiene 2 requisitos principales: 1: debe haber sido registrado con una o más fuentes para recibir notificaciones sobre tipos específicos de evento 2; debe implementar métodos para recibir y procesar estas notificaciones Handler es responsable de lidiar con los eventos.


Un oyente, escucha eventos que son objetos de valor de datos que describen un evento. Cuando ocurrió el evento y el orden de los eventos a menudo es importante. Presionando la tecla ''0'' seguido por ''1'' es diferente a ''1'' y ''0''.

Un controlador maneja un objeto complejo, por ejemplo, una nueva conexión de socket. El controlador puede procesar el objeto por cualquier período de tiempo. El tiempo de creación y orden del objeto no es tan importante. Una conexión de client0 o client1 puede ocurrir en cualquier orden.