Hi Leute,
ich habe eine Klasse für einen Drag&Drop Tree geschrieben. Quelle ist der JTree und Ziel ist eine JList (nur diese eine). Gibt es irgendwie eine Möglichkeit dem JTree mehrere Ziele zuzuordnen --> sprich ich möchte die Objekte in mehrere JLists ziehen (dabei soll aber auch nur die Liste befüllt werden, welche "angesprochen" wird). Hier mal mein Code...
Danke!
ich habe eine Klasse für einen Drag&Drop Tree geschrieben. Quelle ist der JTree und Ziel ist eine JList (nur diese eine). Gibt es irgendwie eine Möglichkeit dem JTree mehrere Ziele zuzuordnen --> sprich ich möchte die Objekte in mehrere JLists ziehen (dabei soll aber auch nur die Liste befüllt werden, welche "angesprochen" wird). Hier mal mein Code...
Code:
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragGestureRecognizer;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.swing.DropMode;
import javax.swing.JList;
import javax.swing.JTree;
import javax.swing.tree.TreeSelectionModel;
/**
* <p>Überschrift: Drag&Drop - Tree</p>
* <p>Beschreibung: JTree mit Drag&Drop-Funktion (z.B. in eine JList)</p>
* <p>Copyright: Copyright (c) 2008</p>
* @version 1.0
*/
public class DragAndDropTree extends JTree implements DragGestureListener,
DragSourceListener, DropTargetListener {
/**Baum*/
JTree tree;
/**zugehörige Liste*/
JList list;
/**Vektor enthält Wert*/
public Vector vecList = new Vector();
/**Vector enthält Positionen der "bewegten" Elemente aus Baum*/
public Vector treePositions = new Vector();
/**Array benötigt für "treePositions"*/
int[] singleTreePosition;
/**Ziel*/
DropTarget mytarget;
/**Quelle*/
DragSource mysource;
DragGestureRecognizer dgr;
/**
*
* @param list
*/
public DragAndDropTree(JList list, Vector treePositions) {
tree = this;
this.list = list;
this.treePositions = treePositions;
// Eigenschaften des Baumes
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setDropMode(DropMode.USE_SELECTION);
tree.setDragEnabled(true);
setDrag_n_Drop(list);
}
/**
* definiert Ziel und Quelle
*
* @param list
*/
void setDrag_n_Drop(JList list) {
// Algemeines Object
mysource = new DragSource();
// Ziel definiert
mytarget = new DropTarget(list, DnDConstants.ACTION_COPY_OR_MOVE, this);
// DragGestureRecognizer dgr
// Definiert Drag-Source
dgr = mysource.createDefaultDragGestureRecognizer(tree,
DnDConstants.ACTION_COPY_OR_MOVE, this);
}
public void dragGestureRecognized(DragGestureEvent dge) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dragDropEnd(DragSourceDropEvent dsde) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dragEnter(DragSourceDragEvent dsde) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dragExit(DragSourceEvent dse) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dragOver(DragSourceDragEvent dsde) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dropActionChanged(DragSourceDragEvent dsde) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dragEnter(DropTargetDragEvent dtde) {
// TODO Automatisch erstellter Methoden-Stub
dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
public void dragExit(DropTargetEvent dte) {
// TODO Automatisch erstellter Methoden-Stub
}
public void dragOver(DropTargetDragEvent dtde) {
// TODO Automatisch erstellter Methoden-Stub
}
/**
* String bearbeiten und der Liste hinzufügen
*/
public void drop(DropTargetDropEvent dtde) {
try {
if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) {
Transferable tr = dtde.getTransferable();
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
String sel = (String) tr
.getTransferData(DataFlavor.stringFlavor);
// Vector füllen
vecList.addElement(sel);
//auf Liste darstellen
list.setListData(vecList);
dtde.dropComplete(true);
// Positionen speichern
singleTreePosition = tree.getSelectionRows();
for (int v = 0; v < singleTreePosition.length; v ++) {
treePositions.addElement(singleTreePosition[v]);
}
} else {
dtde.rejectDrop();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void dropActionChanged(DropTargetDragEvent dtde) {
// TODO Automatisch erstellter Methoden-Stub
}
}
Danke!