2012-12-21 12 views
9

Ich habe mit Ereignis-Listener in AS3 gearbeitet, aber es scheint, als gäbe es in Java keine (außer für Grafikkomponenten). Es ist überraschend.Ereignis-Listener in Java

Die Frage ist, wie könnte ich meinen eigenen Event-Listener in Java implementieren? Vielleicht hat jemand diese Arbeit schon mal gemacht?

Antwort

13

können Sie eine Listener-Schnittstelle definieren:

public interface EventListener { 
    void fireEvent (Event e); 
} 

Dann im Code:

EventListener lst = new EventListener() { 
    @Override 
    public void fireEvent (Event e) { 
     //do what you want with e 
    } 
} 

someObject.setListener(lst); 
someObject.somethingHappened(); 

Dann in someobject (in der Praxis werden Sie wahrscheinlich eine Liste der Zuhörer halten würde):

public class SomeObject { 
    private EventListener lst; 

    public void setListener (EventListener lst) { 
     this.lst = lst; 
    } 

    public void somethingHappened() { 
     lst.fireEvent(new Event("Something Happened")); 
    } 
} 
+0

Sie können Listen auch von Zuhörern fernhalten. Dann statt setListener Methode create addListener(), removeListener(), removeAllListeners(); –

+2

Das funktioniert wie das Beobachtermuster, oder? –

+4

@WlofrevoKcast Ja - es ist das Beobachtermuster. – assylias

3

Zunächst benötigen Sie eine Quelle von Ereignissen, so dass Sie den Hörer anhängen können. Wenn Sie einen benutzerdefinierten Listener benötigen, müssen Sie auch die benutzerdefinierte Quelle implementieren.

In Java können Sie vorhandene Quellen und listener Schnittstellen finden. Wie Sie bereits erwähnt haben, basiert GUI normalerweise auf Ereignissen. Wenn Sie in 3D sind, dann liefern Rendering-Engines entsprechende API (zB collision detection), Dateisystem-Hooks, Eigenschaften ändern Listener (Android).

Es hängt davon ab, was Ihre Bedürfnisse sind. Für die meisten Anwendungen sollte es bereits eine Bibliothek geben, die Ihnen die passende API liefert.

Während Sie Ihre eigene Lösung implementieren, ist der Event Bus für eine anwendungsübergreifende Ereignisbehandlung eine gute Wahl. Meine bevorzugte Implementierung ist in Guava Bibliothek: http://code.google.com/p/guava-libraries/wiki/EventBusExplained

+0

Mit Quelle meinst du ein Objekt, das ein Ereignis versenden wird? –

+0

@Wlofrevo Kcast - Ja, das Objekt, das die Situation erkennt, erstellt und versendet das Ereignis. –

2

Sie Art von Hörern für die Objekte in Java erstreckt Observable Klasse implementieren können Sie beobachten wollen, und auf die Zuhörer, Sie Observer implementieren.

Verwandte Themen