Hallo!
Ich hätte eine Frage bzgl. der Methode mouseMoved.
Ich möchte gerne Objekte in einen JPanel mittels Drag and Drop bewegen.
Dazu verwende ich einen MouseMotionListener, der Aufruf erfolgt in der Methode MouseMoved().
Also, die Objekte werden nicht mit mouseDragged() bewegt, sondern durch einfaches Bewegen der Maus.
Die Objekte sollen sich mit der Maus mitbewegen, die Maus kann sich also auch an einen anderen
Ort als die Objekte befinden. Daher berechne ich mir die Differenz zwischen Maus-Koordinaten und Objekten, und setze dann die Werte neu. Meine Implementierung:
Das funktioniert leider nicht so ganz. Die Objekte springen immer zwischen Maus hin und her
Ein Blick auf die Ausgabe verrät auch was da schief läuft:
Vertex:357.0 451.0
Mouse: 305 312
diffX:-52.0, diffY:-139.0
--------------------------------
Vertex:253.0 171.0
Mouse: 305 311
diffX:52.0, diffY:140.0
--------------------------------
Vertex:357.0 449.0
Mouse: 305 310
diffX:-52.0, diffY:-139.0
--------------------------------
Vertex:253.0 169.0
Mouse: 305 309
diffX:52.0, diffY:140.0
--------------------------------
Vertex:357.0 447.0
Mouse: 305 308
diffX:-52.0, diffY:-139.0
--------------------------------
usw...
Anscheinend wird die Differenz durch zweifachen Aufruf doppelt abgezogen, daher springen die Objekte immer hin und her :/.
Hat jemand eine Idee was ich anders machen könnte?
danke & lg
Ich hätte eine Frage bzgl. der Methode mouseMoved.
Ich möchte gerne Objekte in einen JPanel mittels Drag and Drop bewegen.
Dazu verwende ich einen MouseMotionListener, der Aufruf erfolgt in der Methode MouseMoved().
Also, die Objekte werden nicht mit mouseDragged() bewegt, sondern durch einfaches Bewegen der Maus.
Die Objekte sollen sich mit der Maus mitbewegen, die Maus kann sich also auch an einen anderen
Ort als die Objekte befinden. Daher berechne ich mir die Differenz zwischen Maus-Koordinaten und Objekten, und setze dann die Werte neu. Meine Implementierung:
Java:
/**
* @param x coordinate of the mouse
* @param y coordinate of the mouse
*/
public void move(int x, int y) {
float diffX, diffY;
Iterator<Vertex> it = vertices_.iterator();
while(it.hasNext()) {
Vertex v = it.next();
diffX = v.getX()-x;
diffY = v.getY()-y;
v.setX(x-diffX);
v.setY(y-diffY);
// debug out:
System.out.println("Vertex:"+v.getX()+" "+v.getY());
System.out.println("Mouse: "+x+" "+y);
System.out.println("diffX:"+diffX+", diffY:"+diffY);
System.out.println("--------------------------------");
}
}
Das funktioniert leider nicht so ganz. Die Objekte springen immer zwischen Maus hin und her
Ein Blick auf die Ausgabe verrät auch was da schief läuft:
Vertex:357.0 451.0
Mouse: 305 312
diffX:-52.0, diffY:-139.0
--------------------------------
Vertex:253.0 171.0
Mouse: 305 311
diffX:52.0, diffY:140.0
--------------------------------
Vertex:357.0 449.0
Mouse: 305 310
diffX:-52.0, diffY:-139.0
--------------------------------
Vertex:253.0 169.0
Mouse: 305 309
diffX:52.0, diffY:140.0
--------------------------------
Vertex:357.0 447.0
Mouse: 305 308
diffX:-52.0, diffY:-139.0
--------------------------------
usw...
Anscheinend wird die Differenz durch zweifachen Aufruf doppelt abgezogen, daher springen die Objekte immer hin und her :/.
Hat jemand eine Idee was ich anders machen könnte?
danke & lg