# Drag and Drop eines Graphikelements



## mororu (8. Feb 2010)

Hallo zusammen

Ich habe in der Schule die Aufgabe erhalten ein Türme von Hanoi spiel zu programmieren. Leider habe ich nun noch überhaupt keine Ahnung von Drag and Drop von selbst erstellten Graphik-Objekten. 

Mein Ziel wäre es schliesslich, ein erstelltes PNG oder JPG als Scheibe auf dem GUI anzuzeigen und diese dann zum spielen verwenden zu können. 

Ich habe jetzt einfach das Problem an welchem Ende ich beginnen soll. Gibt es gute Tutorials zu Drag and Drop von graphischen Objekten? Leider habe ich nicht wirklich viel schlaues gefunden bis jetzt. Oder besser gesagt ich habe wahrscheinlich die funktionsweise noch nicht kapiert. 

Also gesucht ist ein eifnaches Tutorial, Beispiel zu Drag and Drop mit graphischen Objekten.

Vielen Dank für eure Tipps


----------



## Gast2 (8. Feb 2010)

Introduction to DnD (The Java™ Tutorials > Creating a GUI With JFC/Swing > Drag and Drop and Data Transfer)


----------



## Michael... (8. Feb 2010)

Sicher, dass Du sowas mit DnD umsetzen willst bzw. damit anfangen willst? DnD wird ja verwendet um Objekte aus einem Element in ein anderes zu verschieben.
Und das ist ja für so ein Spiel gar nicht notwendig.
Ich würde erst einmal mit der Spielogik anfangen und mich dann um die graphische Umsetzung kümmern. Es würde ja zu Beginn genügen, dass der Spieler die Scheibe "selektiert" und dann per Mouseclick die neue Position angibt.


----------



## mororu (8. Feb 2010)

Ja da gebe ich dir eigentlich recht. Aber unser Lehrer will uns vor eine Herausforderung stellen. Darum ist Drag and Drop fast schon eine Bedingung. Leider!


----------



## Mujahiddin (8. Feb 2010)

Versuch doch erstmal, wie Michael erwähnte, die Grafik selber hinzubasteln...
Dann machst du zwei Methoden rein - die eine beim ersten mausklick, dass der Turm selektiert wird, die andere beim zweiten mausklick, wenn ein anderer turm angeklickt wird, und die angeklickte scheibe kleiner ist als die oberste scheibe beim zweiten-klick-turm.
So, wenn du die beiden methoden hast, versuchst du einfach das in drag and drop umzuwandeln, sprich: "mousePressed" aus dem MouseListener ist die erste Methode von oben, und "drop" von DropTargetListener ist die zweite Methode...
was zwischen 'press' und 'drop' passiert > also 'drag', kannst du im MouseMotionListener bei mouseDragged/mouseMoved bestimmen, du kannst z.b. machen, dass das bild dem mauszeiger folgt oder sonstiges... Du kannst auch einfach ein DropTarget erstellen...
Gibt verschiedene Möglichkeit, ich würde aber nicht gleich mit Kanonen auf Spatzen schießen sondern erst 'klein' anfangen.

MfG


----------



## mororu (8. Feb 2010)

Ich nehme schwer an, dass ihr recht habt :noe:. 

Also dann werde ich mal probieren eine Graphik zu erzeugen und diese dann irgendwie zu bewegen.
Was würded ihr an meiner Stelle auch mit Graphics2D probieren?

Melde mich wieder wenn ich mal was geschafft habe.


----------



## mororu (8. Feb 2010)

Bin gerade vor das nächste Problem gestossen. Anhand eines Beispiels wollte ich nun meinem Rectangle2D-Objekt ein Transferhandler zuweisen. Aber da gibt es die Methode setTransferHandler gar nicht???

Was jetzt? Geht das nur mit Swingkomponenten?


----------



## Michael... (8. Feb 2010)

Ich muss noch mal nachfragen: Geht's hier tatsächlich um echtes DnD oder soll einfach per Maus eine Turmscheibe von einen Stapel auf den anderen verschoben werden und die Scheibe dabei den Mauscursor "verfolgen"?

Der TransferHandler kommt nur beim Tranfer von Swing zu Swingkomponente zum Einsatz.


----------



## mororu (8. Feb 2010)

Nein also es würde schon reichen, wenn ich die Scheibe packen kann und auf den anderen Stapel legen. Ich denke nicht das man die Scheibe während dem Drag sehen muss. 

Du siehst ich habe mit dem ganzen Thema noch ein relatives drucheinander. 

Wenn der Transferhandler nur bei Swing-Komponenten zum Einsatz kommt, wie mach ich dann das ganze mit einem Graphics-Objekt?


----------



## Gast2 (8. Feb 2010)

mororu hat gesagt.:


> Nein also es würde schon reichen, wenn ich die Scheibe packen kann und auf den anderen Stapel legen. Ich denke nicht das man die Scheibe während dem Drag sehen muss.
> 
> Du siehst ich habe mit dem ganzen Thema noch ein relatives drucheinander.
> 
> Wenn der Transferhandler nur bei Swing-Komponenten zum Einsatz kommt, wie mach ich dann das ganze mit einem Graphics-Objekt?


Mach doch einfach den Link von oben druch da steht alles drin...


----------



## mororu (9. Feb 2010)

Ja das Tutorial ist ja gut und recht. Aber ich kann ja keine dieser Methoden auf ein Grafik-Objekt anwenden. Diese Methoden mit setDragEnabled usw. gehen ja nur für Swing-Komponenten!

Wie mach ich das mit einem Grafik-Objekt? Gibt es dazu wirklich niergends ein einfaches Tutorial? Das kann doch nicht sein.


----------



## Michael... (9. Feb 2010)

mororu hat gesagt.:


> Wie mach ich das mit einem Grafik-Objekt? Gibt es dazu wirklich niergends ein einfaches Tutorial? Das kann doch nicht sein.


Diese DnD Geschichte gibt es nur für Swingkomponenten - was für ein Objekt Du dann per Drag 'n Drop
verschiebst ist dann letztendlich Dir überlassen.
Wenn Du dieses DnD verwenden willst, kannst Du ja drei JPanels oder JComponents nebeneinander platzieren und dann das drumherum implementieren. Einfach ist das glaube ich nicht - hab mich zum Glück noch nie damit auseinander setzen müssen ;-)

Die Türme von Hanoi sind eigentlich (meine Meinung) nicht ein Fall für DnD. Ich würde eine Graphikkomponente verwenden auf der alles gezeichnet wird und mit einem MouseListener das verschieben bzw. versetzen realisieren.

und ich würde nochmal beim Lehrer nach Fragen, ob das tatsächlich mit dem Swing DnD umgesetzt werden soll, oder ob es nicht einfach darum geht die Scheiben mit der Maus zu versetzen


----------



## mororu (9. Feb 2010)

Du sprichst es an, man muss einfach eine Scheibe packen können und verschieben. Es muss nicht eine Swing-Komponente sein. Aber ich habe zu DnD nur immer Beispiele zu Swing gefunden. Dein Vorschlag mit dem MouseListener klingt vielversprechend. Aber eigentlich ist das ja auch eine Art DnD?

Dann such ich halt mal dazu noch Tutorials.


----------



## mororu (9. Feb 2010)

So hab nun endlich mal etwas brauchbares gefunden. Danke für den Tipp Michael

Wenns jemand interessiert hier mal der Link.

Danke euch für eure Hilfe. Komme drauf zurück wenn es ums Spiel geht.


----------



## Gast2 (9. Feb 2010)

mororu hat gesagt.:


> Du sprichst es an, man muss einfach eine Scheibe packen können und verschieben. Es muss nicht eine Swing-Komponente sein. Aber ich habe zu DnD nur immer Beispiele zu Swing gefunden. Dein Vorschlag mit dem MouseListener klingt vielversprechend. Aber eigentlich ist das ja auch eine Art DnD?
> 
> Dann such ich halt mal dazu noch Tutorials.



Wie gesagt das oben genannte Tutorial ist DAS Tutorial... Und natürlich willst du SWING komponenten (unter anderem auch Grpahik Objekte)verschieben, außer du machst es in SWT dann musst das SWT DnD anschauen. Du hast glaub selber kein Plan was du machst.
Wie stellst du den deine einfachen Graphik Objekte dar, wenn ohne Swing und SWT ?
Hast du überhaupt schon eine GUI? Wenn nicht mach erstmal deine GUI und dann mach dir über verschrieben Gedanken außerdem ist das oben genannte Tutorial gar nicht so schwer man muss sich nur damit auseinander setzen. Aber man sollte halt schon wissen was für Komponenten man darstellt ... Ob Swing,SWT, JAVA FX wahtever... Aber einfach nur Graphik Objekte gibt es nicht, die nichts mit dem GUI Toolkit zu tun haben gibt es nicht.


----------



## Gast2 (9. Feb 2010)

mororu hat gesagt.:


> Du sprichst es an, man muss einfach eine Scheibe packen können und verschieben. Es muss nicht eine Swing-Komponente sein. Aber ich habe zu DnD nur immer Beispiele zu Swing gefunden.






mororu hat gesagt.:


> So hab nun endlich mal etwas brauchbares gefunden.
> Wenns jemand interessiert hier mal der Link.



Einfach nur lol... Das ist übrigens alles Swing was du gefunden hast ^^...


----------



## mororu (9. Feb 2010)

Ja ich hab auch nie behauptet, dass ich weiss welche Komponenten zu welcher Komischen Klasse gehören. Also dann weiss ich es jetzt besser. Ich ging davon aus, dass einfach alle JBlablablas Swing Komponenten sind. 

Jedenfalls kann ich nun ein Bild verschieben, ich habe zwar noch keinen Plan wie meine weiteren Schritte aussehen werden, aber irgendwie werde ich auch das noch hinkriegen.

Ach ja, falls ich dich mit meiner Unwissenheit langweile, dann lies doch einfach zukünftig meine Beiträge nicht mehr. Ich werde nämlich sicher noch viele Fragen stellen, bei welchen du dir wahrscheinlich ziemlich an die Stirn fassen wirst.


----------



## Gast2 (9. Feb 2010)

mororu hat gesagt.:


> Ja ich hab auch nie behauptet, dass ich weiss welche Komponenten zu welcher Komischen Klasse gehören. Also dann weiss ich es jetzt besser. Ich ging davon aus, dass einfach alle JBlablablas Swing Komponenten sind.
> 
> Jedenfalls kann ich nun ein Bild verschieben, ich habe zwar noch keinen Plan wie meine weiteren Schritte aussehen werden, aber irgendwie werde ich auch das noch hinkriegen.
> 
> Ach ja, falls ich dich mit meiner Unwissenheit langweile, dann lies doch einfach zukünftig meine Beiträge nicht mehr. Ich werde nämlich sicher noch viele Fragen stellen, bei welchen du dir wahrscheinlich ziemlich an die Stirn fassen wirst.



Nö warum langweilen, wollte dir nicht zu nahetreten ... aber wenn du ein Tutorial bekommst und zu faul bist es durchzulesen, kann ich ja nichts dafür. Bevor man mit DnD anfängt sollte man halt erstmal die Basic GUI Sachen lernen und nicht irgendwas gefundenes vom Internet rauskopieren, ich dachte halt du wolltest was lernen... Weil wenn du nicht mal weißt was für was die "komischen" Klassen benötigt werden, solltest du kleiner anfangen.
Übrigens siehst du am package name der Klassen wo sie dazugehören. 

Naja gutes gelingen!!!


----------



## mororu (9. Feb 2010)

Sorry hab ich in den falschen Hals gekriegt. Das Tutorial mag sicher gut sein, ich hab es sogar durchgelesen. Aber ich fand es recht schwer verständlich und konnte die Parallelen auf mein Problem nicht ziehen. Natürlich möchte ich was lernen. Aber wenn man absolut null Quellen für ein unbekanntes Problem hat, dann sucht man zuerst halt mal ein Tutorial oder ähnliches.


----------



## Gast2 (9. Feb 2010)

mororu hat gesagt.:


> Sorry hab ich in den falschen Hals gekriegt. Das Tutorial mag sicher gut sein, ich hab es sogar durchgelesen. Aber ich fand es recht schwer verständlich und konnte die Parallelen auf mein Problem nicht ziehen. Natürlich möchte ich was lernen. Aber wenn man absolut null Quellen für ein unbekanntes Problem hat, dann sucht man zuerst halt mal ein Tutorial oder ähnliches.



Ich denke eher dass die allgemein noch die Basics von einer GUI fehlen, darum ist es auch so schwer für dich zuzuordnen. Darum solltest erst einmal einfachere Sachen anfangen. Listenerkonzept usw. Dann lernst auch langsam die Klassen kennen die du benötigst.


----------

