2011-01-18 17 views
72

En términos generales de Java, hay controladores & controladores para eventos.
Quiero decir que los uso sin saberlo, cualquiera que esté disponible en la API.¿Cuál es la diferencia entre Event Listeners & Handlers en Java?

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

¿Cuál es la diferencia entre ellos? Características?

He buscado razones y no he podido encontrar una explicación adecuada para Java.

+0

Esta publicación de blog tiene un buen resumen. http://lemnik.wordpress.com/2009/03/04/gwts-new-event-model-handlers-in-gwt-16/ – kevinarpe

Respuesta

50

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

Un detector es un objeto que se suscribe a eventos de una fuente. Cf. el observer pattern. Normalmente puede tener muchos oyentes suscribiéndose para cada tipo de evento, y son añadidos a través de los métodos addXyzListener.

Ejemplo: El MouseListener en la API de Java.

Un controlador es un objeto que se encarga de controlar 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 setXyzHandler. En otras palabras, generalmente tiene un controlador para cada tipo de evento.

Ejemplo: El MemoryHandler en la API de Java.

+0

hola gracias por su respuesta. ¿A qué te refieres con "suscripciones para eventos"?¿Qué quieres decir con "oyentes"? – BKSpurgeon

+0

@BKSpurgeon, vea el artículo de Wikipedia sobre el patrón de observador vinculado en la respuesta. – aioobe

2

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))

-1

Es semántica.

  • Listener is interface.
  • El adaptador 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.
+1

No diría que un oyente necesariamente es una interfaz. El [BasicButtonListener] (http://download.oracle.com/javase/6/docs/api/javax/swing/plaf/basic/BasicButtonListener.html) por ejemplo es una clase concreta. – aioobe

20

Esta es la forma en que lo veo:

Un oyente relojes para un evento para ser disparados. Por ejemplo, un KeyListener espera KeyEvents, un MessageListener espera a que los mensajes lleguen a la cola, y así sucesivamente.

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.

4

Escucha, busca 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, p. 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.

30

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

  • Listener se asocia con Evento Fuente (Ej: tablero de llaves)
  • Handler se asocia con un Evento (Ej: keydown)

Hablando en general, solo habrá un Administrador de manipuladores central que administrará todos los eventos, mientras que en el caso del Oyente cada Entidad que quiera escuchar, tendrá e para gestionar su propia Colección de oyentes

+0

El mouse es el origen del evento, si observa la analogía MouseListener se asocia con el origen del evento que es Mouse – Swapnil

3

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 específicas tipos de evento 2-debe implementar métodos para recibir y procesar estas notificaciones. Handler es responsable de manejar los eventos.

2

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 maneja 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 de 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 se puede considerar el controlador de evento real. Así que veo el controlador de eventos como el código que se ejecuta como 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.

3

En mi opinión, la diferencia más importante es que utilizamos oyentes por origen de evento, a diferencia del manejador, que es por tipo de evento.

0

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.

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

Cuestiones relacionadas