Java -Event -Handling -Mechanismus
Es gibt 3 Rollen für Teilnehmer im Ereignismechanismus in Java:
1. Event -Objekt: Ereigniszustandsobjekt, das in den entsprechenden Hörmethoden als Parameter verwendet wird, gibt es im Allgemeinen in der Hörermethode.
2. Event Quelle: Die spezifische Ereignisquelle. Wenn Sie beispielsweise auf eine Schaltfläche klicken, ist die Schaltfläche die Ereignisquelle. Wenn Sie möchten, dass die Schaltfläche auf bestimmte Ereignisse antwortet, müssen Sie einen bestimmten Hörer registrieren.
3. Event Hörer: Definieren Sie eine klare Java -Methode entsprechend für das Auftreten jedes klaren Ereignisses. Diese Methoden sind zentral in der Event -Listener -Schnittstelle (EventListener) definiert, die java.util.eventListener erben muss. Die Klasse, die einige oder alle Methoden in der Event -Listener -Schnittstelle implementiert, ist der Ereignishörer.
Bei Ereignissen wird der entsprechende Zustand normalerweise im Ereigniszustandsobjekt eingekapselt, das von java.util.eventObject geerbt werden muss. Das Ereignisstatusobjekt wird als einzelner Parameter an die Listener -Methode übergeben, die auf das Ereignis reagieren sollte. Die Identität der Ereignisquelle, die ein bestimmtes Ereignis ausgibt, ist: definiert die Registrierungsmethode für den Ereignishörer gemäß dem angegebenen Entwurfsformat und akzeptiert Verweise auf die angegebene Instanz der Ereignishörer -Schnittstelle.
Für eine bestimmte Hörereignisklasse ruft es die entsprechende Methode auf und verarbeitet sie auf das Ereignisobjekt.
Schauen wir uns das von JDK bereitgestellte Eventpaket an:
Public Interface EventListener: Die Tag -Schnittstelle, die alle Event -Listener -Schnittstellen erweitert werden müssen.
öffentliche Klasse EventObject erweitert Objekt implementiert serialisierbar
Alle Ereigniszustandsobjekte leiten die Wurzelklasse ab, aus der sie stammen. Alle Ereignisse verweisen auf das Objekt "Quelle", wenn sie konstruiert werden, was logischerweise als das Objekt angesehen wird, das zunächst über das Ereignis auftritt.
(1) Erstellen Sie die Doorevent -Klasse über die Datei teorevent.java, die das EventObject erbt.
/*** Um ein Ereignisobjekt zu definieren, müssen Sie EventObject erben*/öffentliche Klasse DoorEvent erweitert EventObject {private statische endgültige long serialversionuid = 6496098798146410884l; private String -Türstate = ""; // Zeigt den Status der Tür an, es gibt zwei Arten von öffentlichem Doorent (Objektquelle, String -Türstadion) {Super (Quelle); this.doorState = Türstaat; } public void setDoorState (String -Türstaat) {this.doorState = Türstat; } public String getDoorState () {return this.doorState; }}(2) eine neue Event -Hörschnittstelle definieren, die von EventListener geerbt wird; Diese Schnittstelle enthält einen Handler für Doorevent -Ereignisse:
/*** Definieren Sie die Hörschnittstelle, verantwortlich für das Hören von DoorEvent -Ereignissen*/Public Interface DoorListener erweitert EventListener {public void Doorevent (DoorEvent Ereignis);}Über die obige Schnittstelle definieren wir Ereignisanhörungsklassen, die die Funktion der Hörfunktion und Ereignisbearbeitung spezifisch implementieren.
/*** Diese Klasse implementiert die Tür 1 Hörschnittstelle und führt spezifische Türöffnungs- und Schließen von Aktionen durch*/öffentliche Klassen-Türlistener1 implementiert DoorListener {@Override public void Doorevent (DoorEvent Ereignis) {// Todo auto-generiertes Methode Stub If (Event.GetoorState ()! System.out.println ("Tür1 offen"); } else {System.out.println ("Tür1 geschlossen"); }}}/*** Diese Klasse implementiert die Tür 2-Hörschnittstelle, die spezifische Türöffnungs-, Türschließungen sowie leichte Öffnungen und leichte Aktionen ausführt Event.getDoorState (). Equals ("Open") {System.out.println ("Tür2 öffnet, das Licht im Korridor gleichzeitig einschalten"); } else {System.out.println ("Tür2 schließt, das Licht im Korridor gleichzeitig einschalten"); }}}(3) Erstellen Sie eine Ereignisquellenklasse über DoorManager.java, die ein Objekt eines Sammlungshörers verwendet, um alle Ereignishörerobjekte zu speichern. Die Speichermethode erfolgt über AddDoorListener (..). NotifyListener (..) ist eine Methode, die ein Ereignis auslöst, mit dem das System benachrichtigt wird: Das Ereignis ist aufgetreten, und Sie können die entsprechende Verarbeitungsfunktion aufrufen.
/*** Ereignisquellobjekt, hier können Sie sich vorstellen, dass es eine Fernbedienung steuert, die das Öffnen und Schließen der Tür steuert,*(wenn es in Schwung ist, ähnlich wie ein Knopf)*/öffentliche Klassen -Doormanager {private Sammlungshörer; / ** * Ereignis hinzufügen * * @param louser * doorListener */ public void adddoorListener (DoorListener -Listener) {if (listener == null) {listener = new Hashset (); } hörer.add (Hörer); } / ** * Ereignis entfernen * * @param louser * doorlistener * / public void entferntenoorListener (DoorListener -Listener) {if (listener == null) return; Hörer.Remove (Hörer); } / *** das Türöffnungsereignis auslösen* / geschütztes voides FireworkSpaceopened () {if (hörer == null) return; PoorEvent event = new Doorevent (this, "offen"); Benachrichtigungserieer (Ereignis); } / *** das Türschließereignis auslösen* / geschütztes voides FireworkSpaceclosed () {if (listener == null) return; PoorEvent event = new Doorevent (this, "close"); Benachrichtigungserieer (Ereignis); } / ** * alle TürListener benachrichtigen * / private void musifyListener (DoorEvent Ereignis) {iterator iter = lousers.iterator (); while (iter.hasnext ()) {toTureListener listener = (toTorListener) iter.next (); Hörer.DoorEvent (Ereignis); }}}(4) Okay, schreiben Sie endlich ein Testprogramm, um unsere individuellen Ereignisse zu testen. Dieses Programm sollte nicht schwer zu verstehen sein :)
/*** Das Hauptprogramm wird als wer die Tür öffnen*/public Class Dooraune {public static void main (String [] args) {Doormanager Manager = New DoorMager (); Manager. System.out.println ("Ich bin in"); // Close Manager.FireWorksPaceclosend (); }}Bringen Sie die Türmäine aus
Tür 1 öffnet sicht die Tür 2 öffnet sich und öffnet die Lichter im Korridor
Ich bin reingekommen
Tür 1 schließt die Tür 2 schließt, während die Korridorlichter schließen
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!