Drag/Drop Tree -> Table: Wie bekomme ich den Spaltenindex?

dennisalcapone

Grünschnabel
SWT/JFace: Drag/Drop Tree -> Table: Wie bekomme ich den Spaltenindex?

Hallo,

ich ziehe per DragAndDrop ein TreeItem auf eine Tabelle (SWT/JFace, kein Swing).
Danach soll der Text des TreeItem in der Zelle (Spalte x, Zeile y) der Tabelle eingefügt werde, wo das 'drop' passiert.

Über event.item erhalte ich die Zeile (das TableItem):
int index = table.indexOf((TableItem) event.item);

Wie bekomme ich jetzt den Spaltenindex ?

Die einzige Möglichkeit, die ich bis jetzt gesehen habe:
Mit event.x und event.y erhalte ich die Koordinaten der Maus, wenn das 'drop' passiert.
Point pt = new Point (event.x, event.y);
Dann gehe ich durch die Spalten des (TableItem) event.item und prüfe, ob der Punkt innerhalb der Grenzen einer Spalte liegt

TableItem item = (TableItem) event.item;
for (int i=0; i<COLUMNS; i++) {
Rectangle rect = item.getBounds (i);
if (rect.contains (pt)) {
columnIndex = i;
break;
}
}

Leider liefert TableItem.getBounds die Koordinaten relativ zum 'parent', also zur Tabelle.
DropTargetEvent.x und DropTargetEvent.y liefern die Koordinaten relativ zum 'display'
Muss ich jetzt umrechnen oder kennt jemand eine einfachere Lösung?
Viele Dank
 
Zuletzt bearbeitet:
Ich bin nicht sicher ob Du JTable verwendest oder etwas anderes
In JTable gibt es die Routinen:
public intcolumnAtPoint(Point point) und public int rowAtPoint(Point point)
gefunden. vielleicht helfen die Dir weiter

Takidoso
 
die Art wie ich diese beiden Routinen in JTAble ausfindigmachte war, dass ich nach Mouse gesucht habe um Mouse-Listener oder ähnliches aufstöbern zu können. Es erscheint mir dass Du kein Swing benutzt also werden dir dann vermutlich die beiden Routinene nicht helfen. Aber wenn Du im Souce-code deines GUI-Frameworks vielleicht nach Mäusen ausschau hälst klappt es vielleicht auch mit dem Käse ... ehhh Column :-D

viel Glück

Takidoso
 
Hallo, ich hab es gefunden :)

ein Control-Objekt bietet u.a. die Methode toControl(int,int): konvertiert Display-relative Koordinaten in Control-relativen 'Point'.

Ich rufe jetzt table.toControl(event.x, event.y) auf und erhalte so die Koordinaten der Maus beim 'drop' relativ zur Tabelle. Da auch TableItem.getBounds() die Koordinaten relativ zur Tabelle liefert (dem 'parent'), bekomme ich jetzt den gewünschetn Spaltenindex.

Vielen Dank an alle, die sich Gedanken gemacht haben. Speziell an takidoso für die schnellen Antworten.
Jürgen
 
Zurück