tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
649
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nightshifter Nightshifter ist offline Rookie
    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:
    Code java:
    1
    
    ElementGroupTreeEventAgent.getInstance().registerTree(myTree);
    Damit werden alle registrierten Listener myTree als Listener hinzugefügt

    Und nach der Initialisierung eines Views(Widgets) welches auf den Listener implementiert:
    Code java:
    1
    
    ElementGroupTreeEventAgent.getInstance().registerListener(myTreeListener);
    Dabei wird myTreeListener allen registrierten Trees als Listener hinzugefügt

    Mich würden Eure Meinungen und oder Verbesserungsvorschläge bzw. alternativen Ansätze interessieren.
     

  2. #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ß Tom
     
    Java 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

  3. #3
    Nightshifter Nightshifter ist offline Rookie
    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

  1. Antworten: 2
    Letzter Beitrag: 09.05.08, 01:54
  2. Eclipse - kein Highlighting mehr
    Von Tobias Köhler im Forum Java
    Antworten: 2
    Letzter Beitrag: 26.10.07, 08:23
  3. Antworten: 3
    Letzter Beitrag: 28.08.07, 08:36
  4. Eclipse will alles (betrifft Listener)
    Von RealHAZZARD im Forum Java
    Antworten: 5
    Letzter Beitrag: 14.10.05, 12:02
  5. Wie mache ich ein eigenes Event mit eigenem Listener?
    Von GoldKaetzchen im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 21.05.05, 15:00

Stichworte