Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente?

0001001

Bekanntes Mitglied
Hallo,

hab anbei mal eine Testprogramm, dass das Problem verdeutlicht angehängt.

Problem ist:
Wenn ein Element aus einer JList gedraggt und in die gleiche JList auf ein bestehendes anderes Element gedroppt wird, dann wird das bestehende andere Element überschrieben. Ist eine andere JList das Ziel, dann tritt der Fehler nicht auf.

Daher meine Frage, wie kann man einen Drag n' Drop innerhalb einer Liste verhindern, also wenn source und target des drag n drops identisch sind?
 
Ja klar würde das reichen, allerdings bekommt man aus dem TransferHandler nicht die Source Komponente raus? Zumindest hab ich nichts gefunden.
 
Also in der Methode
Code:
canImport(TransferHandler.TransferSupport support)
gibt das "support"-Objekt die Zielkomponente zurück. Du rufst einfach
Code:
support.getComponent();
auf. Casten musste evtl., aber muss nicht sein, wenn du deinen Listen einen Namen verpasst:
Code:
dragFrom.setName("source");
Vom einem
Code:
Component
-Objekt kannst du nämlich jederzeit den Namen via
Code:
component.getName();
abfragen. So kannst du einen Vergleich anstellen
Code:
if ("source".equals(component.getName())) ...
.

Java:
if ("source".equals(support.getComponent().getName())) {
    	return false;
}

Hoffe das hilft dir weiter. 🙂
 
Zuletzt bearbeitet:
Eigentlich müßte man direkt die Instanzen mit == vergleichen können. Also sowas wie
Code:
if (support.getComponent() == dragFrom)
{
    return false;
}
Wenn's nicht klappt, muss man halt nochmal schauen...
 

Neue Themen


Zurück
Oben