SWT: Wie absolute Position von Widgets estimmen?

CyberTim

Grünschnabel
Hallo zusammen!

Ich habe ein bisschen mit Drag and Drop herumexperimentiert und bin auf ein Problem gestoßen. Ich möchte in meinem DropTarget (ein Canvas) etwas genau an der Stelle erzeugen,. wo sich gerade die Maus befindet. Vom Event bekomme ich aber nur die absolute Mausposition zurück. Im Canvas benötige ich aber die relative Position zum Canvas. wenn ich die absolute Position vom Canvas weiß, stört das ja aber nicht. Aer wie bekomme ich die absolute Position herraus?! getLocation gibt mir ja nur die relative Position zum Parent zurück (in meinem Fall (0,0)).
Die Idee, einen MausMoveListener zusätzlich auf das Canvas zu legen, hat auch nicht den erwünschten Erfolg gebracht. Dieser gibt ir während des Drag and Drops keine aktuellen Werte zurück :-(
Vielleicht habt ihr ja noch ne Idee, wie's klappen könnte...

Thx

Tim
 
Hallo!

Also wenn du den MouseListener am Canvas registriert hast solltest du über die öffentlichen Instanzvariablen x und y des MouseEvent's an die relative Klickposition innerhalb des jeweiligen Widgets kommen.

Gruß Tom
 
Ist schon richtig. Ich ziehe aber aus einem anderen Composite etwas in das Canvas herein. Wenn ich das Canvas verlasse, hat der MouseMoveListener eine bestimmte Mausposition registriert z.B. (0,83). Diese lasse ich mir auch permanent in einem Label ausgeben. Nun ziehe ich etwas aus dem anderen Composite etwas in das Canvas hinein. Bis ich die Maustaste loslasse, gibt der MouseMoveListener keine aktuelle Position zurück sondern noch die alte (0,83). Wenn ich also beim DropEvent die Position der Maus über den MouseMoveListener abfrage, bekomme ich die (0,83) zurück und er platziert das Objekt an der Position, auch wenn der Mauszeiger wo ganz anders ist.
So war ja mein erster Gedanke auch.
Dann hab ich halt gehofft, dass ich vom DropEvent die aktuelle Mausposition nehmen kann, aber diese ist absolut (bzw. relativ zum Display, was ja aufs gleiche rauskommt)...

Andere Ideen?
 
Hallo,

helfen Dir vielleicht die Methoden der control-Klasse?
toControl() und toDisplay()
Sie konvertieren Koordinaten.
Entweder 'relativ zum Control' nach 'relativ zum Display' oder umgekehrt.
 
Zurück