snoopysalive
Mitglied
Hallo!
Ich habe gerade ein Problem mit dem Verschieben von Komponenten mit Hilfe des Mauszeigers.
Konkret habe ich eine leere Shell und ein weißes Composite. Wenn man auf das Composite doppelklickt, erscheint an eben dieser Stelle ein Button.
Jetzt möchte ich diesen Button frei auf dem Composite positionieren können, indem ich ihn mit der Maus verschiebe. Hier mal der Code mit dem ich einen solchen Button erstelle:
MouseHandler ist eine innere Klasse, deren Instanz ich dem betreffenden Composite (Variablenname "desktop") als MouseListener zuweise. Wie man sieht, soll der Button dann verschoben werden, wenn man auf ihn klickt und die linke Maustaste gedrückt hält.
Mein Problem besteht jetzt darin, dass ich nicht weiß, wie man die Mausposition (e.x und e.y) so umrechnet, dass der Button immer unter dem Mauszeiger liegt. Unter Swing gibt es da ja extra eine Methode, die das übernimmt, weil das MouseEvent ja anscheinend immer zwei Points zurückliefert: einmal relativ zum Composite und einmal absolut auf dem Bildschirm.
Nachdem ich dazu bisher noch keine Code-Schnipsel gefunden habe, bitte ich jetzt euch darum, mir da das richtige Vorgehen zu erklären. Im Moment hab ich grad ein Brett vor Augen.
Danke,
Matthias
Ich habe gerade ein Problem mit dem Verschieben von Komponenten mit Hilfe des Mauszeigers.
Konkret habe ich eine leere Shell und ein weißes Composite. Wenn man auf das Composite doppelklickt, erscheint an eben dieser Stelle ein Button.
Jetzt möchte ich diesen Button frei auf dem Composite positionieren können, indem ich ihn mit der Maus verschiebe. Hier mal der Code mit dem ich einen solchen Button erstelle:
Java:
private class MouseHandler extends MouseAdapter {
public void mouseDoubleClick(MouseEvent e) {
final Button b = new Button(desktop, SWT.PUSH);
b.setText("Test");
b.setLocation(e.x, e.y);
b.pack();
b.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
if (e.stateMask == SWT.BUTTON1) {
// hier positionieren
}
}
});
}
}
MouseHandler ist eine innere Klasse, deren Instanz ich dem betreffenden Composite (Variablenname "desktop") als MouseListener zuweise. Wie man sieht, soll der Button dann verschoben werden, wenn man auf ihn klickt und die linke Maustaste gedrückt hält.
Mein Problem besteht jetzt darin, dass ich nicht weiß, wie man die Mausposition (e.x und e.y) so umrechnet, dass der Button immer unter dem Mauszeiger liegt. Unter Swing gibt es da ja extra eine Methode, die das übernimmt, weil das MouseEvent ja anscheinend immer zwei Points zurückliefert: einmal relativ zum Composite und einmal absolut auf dem Bildschirm.
Nachdem ich dazu bisher noch keine Code-Schnipsel gefunden habe, bitte ich jetzt euch darum, mir da das richtige Vorgehen zu erklären. Im Moment hab ich grad ein Brett vor Augen.
Danke,
Matthias