Hi Leute,
bei einer Drag and Drop Aktion möchte ich folgendes prüfen.
Wenn sich die aufgenommene DragKomponente(JLabel) über einer gültigen DropKomponente(JLabel) befindet, soll diese dort liegenbleiben.
Ich speichere derzeit von allen DropKomponenten die Fläche(jew. als Point) in einer LinkedList<Point>
Das funktioniert auch gut.
Wie kann ich den jetzt am besten die gleiche Aktion mit den DRAGKOMPONENTEN durchführen.
Ein dauerhaftes ändern während des ziehens ist zu Unperformant, um nicht zu sagen funktioniert nicht.
Über nen kleinen Denkanstoß würde ich mich freuen.
gruß
tschero
bei einer Drag and Drop Aktion möchte ich folgendes prüfen.
Wenn sich die aufgenommene DragKomponente(JLabel) über einer gültigen DropKomponente(JLabel) befindet, soll diese dort liegenbleiben.
Ich speichere derzeit von allen DropKomponenten die Fläche(jew. als Point) in einer LinkedList<Point>
Java:
/**
* Speichert alle Drop Komponenten der Seite in einer LinkedList<JComponent> llDropComponents
* Speichert die gesamte Flaeche der Komponente jew. als Point in einer LinkedList<Point> llDropComponentPoints
* fertig
*/
private void saveDropTargets()
{
// System.out.println("drin in saveDropTargets");
for(Component comp : myJLayeredPane.getComponents())
{
//casten auf JComponent ist wichtig
JComponent target = (JComponent)comp;
if(target.getName().contains("drop_target_"))
{
// System.out.println("Name der Komponente = : " +target.getName());
llDropComponents.add(target);
for(int i=0; i<target.getWidth(); ++i)
{
for(int j=0; j<target.getHeight(); ++j)
{//
llDropComponentPoints.add(new Point(target.getX()+i, target.getY()+j));
}
}
}
}
}
Das funktioniert auch gut.
Wie kann ich den jetzt am besten die gleiche Aktion mit den DRAGKOMPONENTEN durchführen.
Ein dauerhaftes ändern während des ziehens ist zu Unperformant, um nicht zu sagen funktioniert nicht.
Java:
private void dropTarget(MouseEvent e)
{
//zu verwendende Drag Komponente. Diese kommt aus dem Event e.
JComponent comp = (JComponent)e.getComponent().getComponentAt(e.getPoint());
//erzeugen eines ListIterators um durch die Liste mit DropKomponenten zu iterieren
ListIterator li = llDropComponents.listIterator();
while(li.hasNext())
{
JLabel target = (JLabel) li.next();
//
System.out.println(target.getName());
System.out.println(target.getBounds());
//Hier soll die Pruefung stattfinden
//pruefe ob sich ein DropTarget in Reichweite befindet
//wenn ja, lege ab und schnappe ein
//wenn nicht wandere zurueck
//
}
}
Über nen kleinen Denkanstoß würde ich mich freuen.
gruß
tschero