# Mehrere Objekte gleichzeitig verschieben



## propra (4. Jan 2012)

Hallo zusammen,

ich versuche gerade das Verschieben mehrerer Objekte auf einem JPanel zu implementieren. Das Problem, was ich habe, besteht darin, dass die Elemente nachher übereinander liegen. Es werden also alle Elemente auf die Zielposition verschoben.
Es soll aber so sein, dass die Objekte ihren Abstand halten und parallel zueinander verschoben werden.
Hat jemand eine Idee, wie man das umsetzen kann?


----------



## eRaaaa (4. Jan 2012)

propra hat gesagt.:


> Hat jemand eine Idee, wie man das umsetzen kann?



Du hast es leider ja nur grob beschrieben hier...
Generell: Über alle Komponente die verschoben werden sollen iterieren und auf allen eben den Offset berechnen und setzen ?!

Du musst also nicht alle auf Position x,y setzen, sondern eben auf allen die Differenz drauf rechnen

ButtonA : x =50, y= 50
ButtonB : x = 80 y = 80

Button A wird auf 100, 100 verschoben
->
100-50 = x
100-50 = y

ButtonB = x = ?, y = ? (kann jetzt nicht so schwer sein?! )


----------



## bERt0r (4. Jan 2012)

Was sind "Objekte" bei dir? Komponenten, Shapes? Willst du ein Layout manipulieren oder einfach in einem Grafikpanel Formen herumschieben?


----------



## GUI-Programmer (4. Jan 2012)

... bei Komponenten müsse sich diese in einem Container mit NullLayout befinden (was man bis auf diesen Fall und ganz wenig anderen Fällen vermeiden sollte --> siehe bERt0r Signatur). Somit kannst du sie neu positionieren mit setLocation.

Wenn es Shapes (sind, was ich nicht empfehle, eher -->) oder eigene Figuren sind, sollten sich diese in eine Liste befinden (z.B. ArrayList und über Methoden verfügen, bei der man den die Koordinaten einstellen kann, welche in der paintComponent übernommen werden, siehe meine verbessert Lösung (Figurenzeichner) aus deinem Thema: Beliebig viele Objekte auf einer Zeichenfläche zeichnen


----------



## André Uhres (5. Jan 2012)

GUI-Programmer hat gesagt.:


> ... bei Komponenten müssen sich diese in einem Container mit NullLayout befinden (was man bis auf diesen Fall und ganz wenig anderen Fällen vermeiden sollte --> siehe bERt0r Signatur). Somit kannst du sie neu positionieren mit setLocation.



Beim Ziehen von Komponenten benötigen wir idealerweise einen Layout-Manager, der zwar nicht die Position einer Komponente bestimmt, der aber standardmäßig die bevorzugte Größe der Komponente als ihre Größe nimmt und automatisch die bevorzugte Größe des Containers berechnet. Null-Layout kann das nicht und in diesem Fall behält bERt0r immer noch Recht: "Null layout is evil!"

Gruß,
André


----------



## ARadauer (5. Jan 2012)

André Uhres hat gesagt.:


> Null-Layout kann das nicht und in diesem Fall behält bERt0r immer noch Recht: "Null layout is evil!"


Wieso böse? Wenn ich Komponenten absolut positionieren will.


----------



## propra (5. Jan 2012)

Hallo zusammen,

vielen Dank für die vielen Antworten. Wie eRaaaa bereits richtig sagte, war das Problem nur sehr unzureichend beschrieben, seine Intuition aber richtig. Mir ging es darum Objekte auf einer Zeichenfläche zu verschieben.
Das mit der Berechnung des Offset ist mir kurz nach dem Posten auch in den Sinn gekommen. Ausprobiert und voilá  es funktioniert. Deshalb ist mir mein Beitrag auch etwas durchgegangen und ich melde mich erst jetzt.
Trotzdem noch einmal Dank an alle.


----------



## André Uhres (6. Jan 2012)

ARadauer hat gesagt.:


> Wieso böse? Wenn ich Komponenten absolut positionieren will.



Weil Layout-Manager drei verschiedene Funktionen durchführen, wie das aus meinem obigen Beitrag hervorgeht. 

Die Position einer Komponente zu bestimmen ist nur eine dieser drei Funktionen. Null-Layout ignoriert aber rücksichtslos auch die beiden anderen .

Gruß,
André


----------

