View communication eclipse

blurry333

Mitglied
Hallo,

was denkt ihr ist der beste Weg damit ich was in ViewA ausgewählt wird in ViewB anzeigen kann. Wie findet ihr ISelectionProvider ? Was ist eurer Meinung der einfachste Weg ?
 
Kann mir mal einer erklären wie das funktionieren soll. Ich dachte von einem Interface kann man keine Instanz anlegen ?

Code:
ISelectionListener listener = new ISelectionListener() {
         public void selectionChanged(IWorkbenchPart part, ISelection sel) {
            if (!(sel instanceof IStructuredSelection))
               return;
            IStructuredSelection ss = (IStructuredSelection) sel;
            Object o = ss.getFirstElement();
            if (o instanceof Book)
               viewer.setInput(ss.size()==1 ? o : null);
         }
      };
 
ja ich mein RCP . Den genauen Unterschied kenn ich auch nicht genau. Aber wieso kann man von einem Interface eine Instanz bilde ? Funktioniert der Code weiter oben ?

Java:
ISelectionListener listener = new ISelectionListener() {
 
Zuletzt bearbeitet:
ja das geht. ob du jetzt (als Beispiel) "MyClass implements InterfaceXY { void zuImplMethode() }" schreibst und die Methoden des Interface dort ausimplementierst oder es so machst wie oben ist egal. Schöner ist es aber mit einer eigenen Klasse.
wenn du aber Eclipse RCP (ab Juno war das glaub ich) verwendest, dann am besten den ESelectionService per Dependency Injection
 
Zuletzt bearbeitet:
Java:
ISelectionListener listener = new ISelectionListener() { public void selectionChanged(IWorkbenchPart part, ISelection sel) { if (!(sel instanceof IStructuredSelection)) return; IStructuredSelection ss = (IStructuredSelection) sel; Object o = ss.getFirstElement(); if (o instanceof Book) viewer.setInput(ss.size()==1 ? o : null); } };

Ich komm nicht aus der Java Welt . Was mach ich hier genau ? Leg ich hier eine Klasse an ?
Muss ich für (IWorkbenchPart part, ISelection sel) noch Instanzen anlegen ?
 
Zuletzt bearbeitet:
Du erstellst da eine Instanz einer sog. anonymen Klasse.

In der Methode selbst musst du keine Instanzen der Klassen mehr anlegen, da die ja über die Parameter reinkommen, wenn die Methode aufgerufen wird.
 
Ich hab in View1 eine String Variable. Wenn sich die ändert dann soll View2 benachrichtigt werden. Weiß einer wie das geht? Ein Tutorial find ich dazu im ganzen web nicht. Oder geht das mit dem SelectionService gar nicht ?
 
Hmm. Ich kenn das Observer Pattern nur wenn es sich um dieselbe View handelt. Jetzt hab ich aber 2 Views. Und wenn sich in ViewA die Variable ändert soll ViewB informiert werden. Muss ich da jetzt extra eine neue Klasse anlegen die für die Variable eine set/get Methode anbietet oder wie würdet ihr das machen ? Das einfachste wäre doch eine neue statische Klasse anlegen, und dort statische get/set anbieten.
 
Man könnte es auch so sehen. ViewA ist das Subject und ViewB der Observer. Aber das es verschiede Views sind brauche ich wohl noch eine neue Klasse die zwischen beiden vermittelt. Wie seht ihr das ?
 
hast du dir den Beitrag überhaupt mal durchgelesen? das geht auch mit mehreren Views...
But the observer pattern is not limited to single user interface components. For example you could have a part A in your application which displays the current temperature.

Another part B displays a green light if the temperature is above 20 degree celsius. To react to changes in the temperature part B registers itself as a listener to Part A.
 
Da steht dass es geht, aber nicht wie. Wenn ich zu ViewPart4.addListener() aufrufe und ViewPart5 als Parameter übergebe, dann funktioniert es nicht. Fehlermeldung: ViewPart4 cannot be resolved to a variable
 
Leute mit diesem Codeschnipsel geht es total einfach
Code:
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchPart view =(IWorkbenchPart)workbench.getActiveWorkbenchWindow().getActivePage().findViewReference("UnserProjekt.view4").getView(false);
((ViewPart4)view).update(selectedFile);
 
a) du hast keine Zeile Code gepostet, die irgendjemandem helfen würde dir zu helfen -> was ist ViewPart5 (z.B.)??
b) du wirst nirgends Code finden, den du 1:1 übernehmen kannst. So flexibel musst du schon sein, dass du das auf deine Bedürfnisse anpasst.
c) du erwähnst nirgends, welche Eclipse-Version du für deine RCP-App verwendest. Da gibt's große Unterschiede
d) na dann. Wenn du Eclipse 4 verwendest, würde ich den IEventBroker (Eclipse 4 event system (EventAdmin) - Tutorial) verwenden
 

Zurück
Oben