Ich habe eine JList, die eine ArrayList mit benutzerdefinierten Objekten enthält, und ich versuche, eine Drag-and-Drop-Funktion in Felder zu erstellen. Ich habe Probleme zu verstehen, wie man das Objekt in Übertragbar verpackt und erhält.
Das ist ungefähr so weit wie ich gekommen bin:
%Vor%Klarstellung: Ich habe Probleme, die Objektauswahl aus der JList zu nehmen und daraus ein Übertragbares zu erstellen. Mit dem obigen Code wird die toString-Repräsentation des Objekts einfach in das Textfeld eingefügt, sodass ich keine Objektdaten von der abgelegten Position abrufen kann. Wie kann ich das Objekt selbst "verpacken" und es in einen Platzhalter einfügen, damit ich das Objekt selbst von der GUI aus referenzieren kann?
Idealerweise gibt es 4 Felder, die jeweils ein Objekt enthalten, das gelöscht werden kann. Die Person würde aus der Liste entfernt, wenn sie gelöscht wird, aber bei der Ersetzung in die Liste zurückkehrt.
Drag and Drop kann ein komplexes Biest sein, das durch die widersprüchlichen verfügbaren Informationen nicht einfacher gemacht wird. Persönlich vermeide ich die Transfer-API, aber ich bin eine alte Schule.
Der Kleber zu DnD ist wirklich der DataFlavor
. Ich ziehe es vor, meine eigenen zu rollen, macht das Leben viel einfacher.
In diesem Beispiel habe ich ein einzelnes TransferHandler
verwendet, aber realistisch gesehen sollten Sie wirklich eins zum Ziehen und eins zum Löschen haben, insbesondere sollten Sie eines für jede Komponente haben, auf die Sie auflegen wollen.
Der Hauptgrund dafür ist, dass ich einen Trap in meine canImport
-Methode gesetzt habe, um ihn abzulehnen, wenn du über einen JList
ziehst, also kannst du ihn nur auf den JLabel
fallen lassen, das ist ein kleiner Hack und wahrscheinlich nicht die beste Idee.
Tags und Links java swing drag-and-drop jlabel jlist