Mecanismo de manejo de eventos Java
Hay 3 roles para los participantes en el mecanismo de eventos en Java:
1. Objeto de evento: el objeto de estado de evento, utilizado en los métodos correspondientes de oyente, como parámetros, generalmente existe en el método del oyente.
2. Fuente de eventos: la fuente de evento específica. Por ejemplo, si hace clic en un botón, el botón es la fuente del evento. Si desea que el botón responda a ciertos eventos, debe registrar un oyente específico.
3. Oyente de eventos: Defina un método Java claro en consecuencia para la ocurrencia de cada evento claro. Estos métodos se definen centralmente en la interfaz Event Listener (EventListener), que debe heredar java.util.eventListener. La clase que implementa algunos o todos los métodos en la interfaz del oyente del evento es el oyente de eventos.
A medida que ocurren los eventos, el estado correspondiente generalmente se encapsula en el objeto de estado de evento, que debe heredarse de java.util.eventobject. El objeto de estado del evento se pasa como un solo parámetro al método del oyente que debe responder al evento. La identidad de la fuente del evento que emite un evento en particular es: Define el método de registro para el oyente de eventos de acuerdo con el formato de diseño especificado y acepta referencias a la instancia de interfaz de oyente de eventos especificada.
Para una clase de evento de escucha específica, cuando escucha el objeto del evento, llama al método correspondiente y lo procesa.
Echemos un vistazo al paquete de eventos proporcionado por JDK:
Public Interface EventListener: la interfaz de etiqueta que se deben extender todas las interfaces de oyentes de eventos.
clase pública eventObject extiende el objeto implementos serializables
Todos los objetos de estado de evento derivarán la clase raíz de la que son. Todos los eventos hacen referencia al objeto "fuente" cuando se construye, que se considera lógicamente como el objeto que ocurre inicialmente sobre el evento.
(1) Cree la clase DoorEvent a través del archivo doorevent.java, que hereda el EventObject.
/*** Para definir un objeto de evento, debe heredar eventObject*/public class doorEvent extiende EventObject {private static final long serialversionUid = 6496098798146410884l; String private DoorState = ""; // Indica el estado de la puerta, hay dos tipos de doorevent público (fuente de objeto, string doorState) {super (fuente); this.doorState = DoorState; } public void setdoorState (string doorState) {this.doorState = doorState; } public String getDoorState () {return this.doorState; }}(2) Definir una nueva interfaz de escucha de eventos, que se hereda de EventListener; Esta interfaz contiene un controlador para eventos Doorevent:
/*** Defina la interfaz de escucha, responsable de escuchar eventos de Doorevent*/Public Interface DoorListener extiende EventListener {public void doorevent (evento doorevent);}A través de la interfaz anterior, definimos las clases de escucha de eventos, que implementan específicamente la función de escucha y la función de manejo de eventos.
/*** This class implements the door 1 listening interface, and performs specific door opening and closing actions*/public class DoorListener1 implements DoorListener { @Override public void doorEvent(DoorEvent event) { // TODO Auto-generated method stub if (event.getDoorState() != null && event.getDoorState().equals("open")) { System.out.println ("Door1 Open"); } else {System.out.println ("Door1 cerrado"); }}}/*** Esta clase implementa la interfaz de escucha de la puerta 2, que realiza la apertura específica de la puerta, el cierre de la puerta y las acciones de apertura de luz y cierre de luz*/public class DoorListener2 implementa la lista de puertas {@Override public void doorvent (evento doorvent) {// TODO Auto-Generated Method Stub if (Event.getDoorstate ()! event.getDoorState (). Equals ("Open")) {System.out.println ("Se abre la puerta2, encendiendo la luz en el corredor al mismo tiempo"); } else {System.out.println ("La puerta2 cierra, encendiendo la luz en el corredor al mismo tiempo"); }}}(3) Cree una clase fuente de eventos a través de Doormanager.java, que utiliza un objeto de oyentes de colección para almacenar todos los objetos de oyentes de eventos. El método de almacenamiento es a través de AddDoorListener (..). NotifyListeners (..) es un método que desencadena un evento, que se utiliza para notificar al sistema: el evento ha ocurrido y puede llamar a la función de procesamiento correspondiente.
/*** Objeto fuente del evento, aquí puede imaginarlo como un control remoto que controla la apertura y el cierre de la puerta,*(si está en el swing, es similar a un botón)*/public class Doormanager {oyentes de la colección privada; / ** * Agregar evento * * @param oyente * doorlistener */ public void addDoorListener (DoorListener oyente) {if (oyentes == null) {oyentes = new Hashset (); } oyentes.add (oyente); } / ** * Eliminar evento * * @param oyente * DoorListener * / public void RemoveDoorListener (DoorListener oyente) {if (oyentes == null) return; oyentes.remove (oyente); } / *** activar el evento de apertura de la puerta* / protegido void fireworkspaceOpened () {if (oyentes == null) return; Evento doorevent = nuevo doorvent (esto, "abierto"); NotifyListeners (evento); } / *** Dispara el evento de cierre de la puerta* / protegido void fireworkspaceClosed () {if (oyentes == null) return; Evento doorevent = new DoorEvent (esto, "Cerrar"); NotifyListeners (evento); } / ** * Notifique a todos los Puertos * / Private Void NotifyListeners (evento DoorEvent) {iterator iterator = oyentes.iterator (); while (iter.hasnext ()) {doorlistener oyente = (doorlistener) iter.next (); oyente.doorvent (evento); }}}(4) Bien, finalmente escriba un programa de prueba para probar nuestros eventos personalizados. Este programa no debería ser difícil de entender :)
/*** El programa principal se imagina como quién quiere abrir la puerta*/public class Doormain {public static void main (string [] args) {Doormanager Manager = new Doormanager (); gerente.AdddoorListener (New DoorListener1 ()); // Agregue el oyente a la puerta 1 administrador.adddoorlistener (new DoorListener2 ()); // Agregue el oyente a la puerta 2 // abre la puerta gerente.fireworkspaceOpened (); System.out.println ("He entrado"); // cerrar gerente.fireworkspaceClosed (); }}Correr por portero
La puerta 1 abre la puerta 2 abre, mientras abre las luces en el corredor
He entrado
La puerta 1 cierra la puerta 2 cierra, mientras cierra las luces del corredor
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!