ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
649
649
EMPFEHLEN
-
10.06.11 16:06 #1
- Registriert seit
- Feb 2009
- Beiträge
- 7
Hallo allerseits,
ich habe nun zwei Tage lang verschiedene Möglichkeiten gesucht einen eigenen Listener für eine Eclipse RCP Anwendung zu implementieren und bin nicht wirklich schlauer geworden. Ich möchte an dieser Stelle mal eine Lösung vorstellen, die funktioniert, aber in meinen Augen nicht wirklich schön ist.
Das Problem:
Ein View (bzw. Widgets in dieser View) soll über Änderungen in einem anderen View (bzw. Widgets) informiert werden und darauf reagieren, dabei handelt es sich um kein SelectionEvent oder ähnliches. Als Beispiel nehme ich hier mal einen Baum, bei dem Knoten gelöscht werden können. Eine Andere View soll mitbekommen welche Knoten gelöscht wurden und sich dementsprechend aktualisieren.
Da die beiden Views aber nicht voneinander wissen und ich von der einen View auch nicht auf die andere komme, habe ich folgendes umgesetzt.
Lösung:
Eine Klasse als Singleton, die alle vorhandenen Trees und Listener enthält:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
public class TreeEventAgent { private static TreeEventAgent instance = new TreeEventAgent(); private static List<ElementTree> trees = new ArrayList<ElementTree>(0); private static List<ElementTreeListener> listeners = new ArrayList<ElementTreeListener>(0); private TreeEventAgent() { } public static TreeEventAgent getInstance() { return instance; } public void registerTree(ElementTree tree) { if (!trees.contains(tree)) { trees.add(tree); } for (ElementTreeListener listener : listeners) { tree.addListener(listener); } } public void registerListener(ElementTreeListener listener) { if (!listeners.contains(listener)) { listeners.add(listener); } for (ElementTree tree : trees) { tree.addListener(listener); } } }
Nach der initialisierung eines Trees, welcher die Events feuert und dabei alle seine Listener informiert, rufe ich dann folgendes auf:
Damit werden alle registrierten Listener myTree als Listener hinzugefügtCode java:1
ElementGroupTreeEventAgent.getInstance().registerTree(myTree);
Und nach der Initialisierung eines Views(Widgets) welches auf den Listener implementiert:
Dabei wird myTreeListener allen registrierten Trees als Listener hinzugefügtCode java:1
ElementGroupTreeEventAgent.getInstance().registerListener(myTreeListener);
Mich würden Eure Meinungen und oder Verbesserungsvorschläge bzw. alternativen Ansätze interessieren.
-
15.06.11 00:54 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
ein alternativer Ansätz wäre es beispielsweise einen lose entkoppelten EventBus zur Kommunikation zwischen Komponenten in der Anwendung zu verwenden. Damit schickst du in deinem Fall nur noch "Nachrichten" mit Daten und der Aktion deiner Datenänderung an den EventBus. Der EventBus verteilt dann die Nachrichten an alle registrierten Komponenten.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
24.06.11 19:23 #3
- Registriert seit
- Feb 2009
- Beiträge
- 7
Hallo Thomas,
vielen Dank für die Info. Die Geschichte mit dem EventBus ist mir neu. Sieht sehr gut aus. So werde ich es machen.
Ähnliche Themen
-
Externe Grafik speichern auf eigenem Server(mit eigenem Namen)
Von IR-Bastian im Forum PHPAntworten: 2Letzter Beitrag: 09.05.08, 01:54 -
Eclipse - kein Highlighting mehr
Von Tobias Köhler im Forum JavaAntworten: 2Letzter Beitrag: 26.10.07, 08:23 -
Kein Zugriff von eclipse auf OO Base DB
Von ceyx im Forum JavaAntworten: 3Letzter Beitrag: 28.08.07, 08:36 -
Eclipse will alles (betrifft Listener)
Von RealHAZZARD im Forum JavaAntworten: 5Letzter Beitrag: 14.10.05, 12:02 -
Wie mache ich ein eigenes Event mit eigenem Listener?
Von GoldKaetzchen im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 8Letzter Beitrag: 21.05.05, 15:00





Zitieren

Login





