JFace: postEvent
Hallo.
Weiß irgend jemand, wie man einem JFace viewer ein event posten kann?
Ich habe einen TreeViewer der beim Expand/Collapse-event einiges macht.
Weiterhin möchte ich, dass ein Doppelklick auf ein item (mit children) das item ensprechend öffnet oder schließt (normales Verhalten in einem tree - z.b. Explorer). Wenn ich allerdings in der JFace-Eventbearbeitung das treeitem programmatisch öffne oder schließe (TreeViewer.setExpandedState()) wird das entsprechende Expand/Collapse-event NICHT gefired und ich müsste somit den code 2 x platzieren...
Stattdessen soll das Doppelklick-Event entsprechend ein Expand oder Collaps posten (oder senden) und in meinem Expand/Collapse-event ist es damit völlig transparent, ob das item per doppelklick oder per expand/collapse- button geöffnet oder geschlossen wurde.
Einfache Sache eigentlich...aber ich kriegs nicht hin, dem TreeViewer das entsprechende Event zu posten!!!
Spin
Weiß irgend jemand, wie man einem JFace viewer ein event posten kann?
Ich habe einen TreeViewer der beim Expand/Collapse-event einiges macht.
Weiterhin möchte ich, dass ein Doppelklick auf ein item (mit children) das item ensprechend öffnet oder schließt (normales Verhalten in einem tree - z.b. Explorer). Wenn ich allerdings in der JFace-Eventbearbeitung das treeitem programmatisch öffne oder schließe (TreeViewer.setExpandedState()) wird das entsprechende Expand/Collapse-event NICHT gefired und ich müsste somit den code 2 x platzieren...
Stattdessen soll das Doppelklick-Event entsprechend ein Expand oder Collaps posten (oder senden) und in meinem Expand/Collapse-event ist es damit völlig transparent, ob das item per doppelklick oder per expand/collapse- button geöffnet oder geschlossen wurde.
Einfache Sache eigentlich...aber ich kriegs nicht hin, dem TreeViewer das entsprechende Event zu posten!!!
Spin
Hallo,
vielleicht irre ich mich, aber eigentlich müßtest du doch einfach einen DoubleClickListener auf dem TableViewer registrieren können. Den Code solltest du eh außerhalb platzieren. Vielleicht in einer public Methode auf die alle Listener Zugriff haben?!
Vielleicht versteh ich aber auch das Problem nicht 100%ig, da müßtest du noch mal genauer beschreiben, welcher Listener wo registriert ist und was er tut.
vielleicht irre ich mich, aber eigentlich müßtest du doch einfach einen DoubleClickListener auf dem TableViewer registrieren können. Den Code solltest du eh außerhalb platzieren. Vielleicht in einer public Methode auf die alle Listener Zugriff haben?!
Vielleicht versteh ich aber auch das Problem nicht 100%ig, da müßtest du noch mal genauer beschreiben, welcher Listener wo registriert ist und was er tut.
nochmal kurz:Hallo,
vielleicht irre ich mich, aber eigentlich müßtest du doch einfach einen DoubleClickListener auf dem TableViewer registrieren können. Den Code solltest du eh außerhalb platzieren. Vielleicht in einer public Methode auf die alle Listener Zugriff haben?!
Vielleicht versteh ich aber auch das Problem nicht 100%ig, da müßtest du noch mal genauer beschreiben, welcher Listener wo registriert ist und was er tut.
der expandlistener macht ein bisschen was (wirklich nur'n 3-zeiler (resourcen allokieren/freigeben)) aber eben direkt in der event-barbeitung.
ein doppelklick auf ein tree-item soll lediglich das item expandieren/collabieren (standard-verhalten z.b. im Explorer - nicht aber im JFace-TreeViewer!)
in der DoubleClick-eventverarbeitung expandiere oder collabiere ich das entsprechende item programmatisch (setExpanded(boolean)) und das ruft eben NICHT das entsprechende Event auf!
ich möchte nicht im DoubleCklick-event diesen 3-zeiler separat aufrufen, weil ich mir gut vorstellen kann, dass in irgendeiner zuküftigen JFace implementierung das Expand-event gefeuert wird und dann hätte ich den 3-zeiler doppelt ausgeführt...
ist das verständlicher??
Danke
Spin
Ich denke, du solltest die nicht so viele Gedanken über die zukünftigen Versionen machen.AAuch denke ich, deine Sorge ist unbegründet, denn
a) Wenn in einer späteren Version das ExpandItel-Event gefeuert wird, dann innerhalb der Standard-Bearbeitung des Events und dieses überschreibst du ja.
b) Da jedes mal ein Expand vonstatten geht, läuft der zweite Expand n die "Leere", das heisst, es wird nichts gemacht.
Alternativ kannst du in der Eventbearbeitung ja abfragen, ob das Item erst expandiert werden muss -> Code ausführen oder nicht -> Code überspringen.
a) Wenn in einer späteren Version das ExpandItel-Event gefeuert wird, dann innerhalb der Standard-Bearbeitung des Events und dieses überschreibst du ja.
b) Da jedes mal ein Expand vonstatten geht, läuft der zweite Expand n die "Leere", das heisst, es wird nichts gemacht.
Alternativ kannst du in der Eventbearbeitung ja abfragen, ob das Item erst expandiert werden muss -> Code ausführen oder nicht -> Code überspringen.
a) Wenn in einer späteren Version das ExpandItel-Event gefeuert wird, dann innerhalb der Standard-Bearbeitung des Events und dieses überschreibst du ja.
DAS Argument lasse ich dann mal gelten

Rufe jetzt den 3 Zeiler (als Methode) im doubleclick-event auf.
Thread kann geschlossen werden und Danke an alle, die sich Gedanken gemacht haben!
Spin
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spin.Doctor« (13. Dezember 2010, 14:39)


