JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren!

alloisxp

Mitglied
Hallo allerseits!

Ich verstehe gerade noch nicht richtig wie ich einen ListViewer quasi programmatisch mit einem neuen Wert füttere.

Also bisher habe ich es so:

Ich habe einen ListViewer, bei einem SelectionChanged Event übergibt der einen Wert an eine Klassenvariable einer WizardPage und dann habe ich einen Button, dieser soll bei Klick diesen ausgewählten Wert einfach in einen zweiten (bisher leeren) ListViewer schieben (beide listViewer sind auf einer WizardPage, und das Wert rüberschieben soll mehrmals hintereinander möglich sein).

Ich dachte ich schreibe dann einfach ins Klick Event des Buttons sowas wie:

Code:
@Override
public void mouseDown(MouseEvent e) {
	chosenMethods.add(actualChosenMethod);
	growingListViewer.setInput(chosenMethods);
	growingListViewer.update(actualChosenMethod, null);
}

Wobei chosenMethods eine Liste mit Objekten ist für die ich einen Label Provider habe für den growingListViewer.
(Muss ich den Label Provider jetzt auch noch irgendwie updaten oder so?)

Also die chosenMethods werden (wie im Debugger gesehen) richtig aufgebaut. Die Idee war halt das ich mit jeder zusätzlichen Selection im anderen Feld die Liste ergänze und growingListViewer nochmal komplett neu mit einem Input versehe.

Allerdings taucht im Dialog bei Klick auf den Button gar nichts auf im growingListViewer 🙁

(Ist leider mein erster Wizard den ich baue, bin nicht so der UI Fachmann wie man merkt)
 
Ich bin jetzt zwar schon eine Weile aus SWT/jFace raus, aber dunkel erinnere ich mich daran, dass du dem Viewer auch einen ContentProvider und respektive einen LabelProvider geben musst...

Schau mal in dem Tutorial zum TableViewer von Lars Vogel rein:
Eclipse JFace Table - Tutorial
(Punkt 1.2 und 1.3 .... )

Generell zu empfehlen sind auch seine anderen Eclipse- und SWT-basierten Tutorials.
 
Danke für den Tip!
Habe es jetzt repariert. der Fehler lag zwar zusätzlich noch woanders (also nicht nur im mouse event), aber als ich wusste wie dieses genau aussehen muss war es leichter den anderen Fehler zu finden!
 
Jetzt habe ich noch ein anderes Problem (will erstmal keinen neuen thread dafür eröffnen):

Ich würde gerne durch das mouse Event auf dem Button bestimmte Variablen der WizardPage setzen und dann muss eine andere Klasse (die den Wizard gestartet hat) wissen:

Button wurde gedrückt, Variablen sind gesetzt, frage diese ab und führe eine Methode aus.

Also in der den Wizard startenden klasse (also nicht im wizard oder der wizardPage) hätte ich quasi gerne sowas:

while(wizard aktiv){
if(button gedrückt){ //kann mehrmals passieren
machwas(wizardVariable);
}
}

Oder ist es besser die Business-Methode direkt in den mouseDown Listener im Wizard zu schreiben?
 
Hab mich jetzt schon eine Weile nicht mehr mit Eclipse-Wizards beschäftigt, muss da also erst einmal passen. Sorry!
 
Hallo alloxp,

geht es darum Werte aus dem selektierten ListViewer rauszuholen oder reinzuschreiben?
Weil über den Viewer kannst du #getSelection() machen und dort das gewünschte Objekt nach deinem Datenstruktur casten und Werte holen.

Oder habe ich es falsch verstanden?

Gruss lam
 

Zurück
Oben