Hallo zusammen,
ich möchte von einem JTree per Drag and Drop die Informationen auf einen Canvas ziehen. Wenn ich nun die Informationen versuche über das Transferable Objekt zu bekommen, bekomme ich NULL Werte zurück.
Bsp.: Ein Gülter TreePath als String ausgegeben:
[root, meinknoten, meinsubknoten]
So bekomme ich es über das Transferable Objekt zurück:
[null, null, null]
D.h. es ist ein gültiges TreePath Objekt über das Transferable Objekt angekommen, nur mit NULL werten. TreePath implementiert Serializable.
ich bin folgendermaße vorgegangen:
Der Drag Source Listener:
und hier meine Transferable Klasse:
ich rufe folgendermaße die Daten im Canvas auf:
Viele Dank
GerdGerdGerd
ich möchte von einem JTree per Drag and Drop die Informationen auf einen Canvas ziehen. Wenn ich nun die Informationen versuche über das Transferable Objekt zu bekommen, bekomme ich NULL Werte zurück.
Bsp.: Ein Gülter TreePath als String ausgegeben:
[root, meinknoten, meinsubknoten]
So bekomme ich es über das Transferable Objekt zurück:
[null, null, null]
D.h. es ist ein gültiges TreePath Objekt über das Transferable Objekt angekommen, nur mit NULL werten. TreePath implementiert Serializable.
ich bin folgendermaße vorgegangen:
Code:
public class MyTree extends JTree implements ActionListener, MouseListener, DragGestureListener { ...
public MyTree() {
super();
dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
...
@Override
public void dragGestureRecognized(DragGestureEvent event) {
TreePath selectionPath = getSelectionPath();
TransferableEntry transferable = new TransferableEntry(selectionPath);
dragSource.startDrag(event, DragSource.DefaultCopyDrop, transferable, dragSourceListener);
}
}
}
Der Drag Source Listener:
Code:
static class JTreeDragSourceListerner implements DragSourceListener {
@Override
public void dragDropEnd(DragSourceDropEvent arg0) {
}
@Override
public void dragEnter(DragSourceDragEvent arg0) {
}
@Override
public void dragExit(DragSourceEvent arg0) {
}
@Override
public void dragOver(DragSourceDragEvent arg0) {
}
@Override
public void dropActionChanged(DragSourceDragEvent arg0) {
}
}
und hier meine Transferable Klasse:
Code:
public class TransferableEntry implements Transferable {
private TreePath treePath;
public static final DataFlavor TREE_PATH_FLAVOR = new DataFlavor(TreePath.class, "Tree Path");
private DataFlavor flavors[] = { TREE_PATH_FLAVOR };
public TransferableEntry(TreePath path) {
treePath = path;
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (isDataFlavorSupported(flavor)) {
return (Object)treePath;
} else {
throw new UnsupportedFlavorException(flavor);
}
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.getRepresentationClass() == TreePath.class;
}
}
ich rufe folgendermaße die Daten im Canvas auf:
Code:
myCanvas.setDropTarget(new DropTarget(glCanvas, new DropTargetListener() {
@Override
public void dragEnter(DropTargetDragEvent event) {
event.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
}
@Override
public void dragExit(DropTargetEvent arg0) {
}
@Override
public void dragOver(DropTargetDragEvent event) {
}
@Override
public void drop(DropTargetDropEvent event) {
Transferable transferable = event.getTransferable();
try {
if (event.isDataFlavorSupported(TransferableEntry.TREE_PATH_FLAVOR)) {
event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Object transferData = transferable.getTransferData(TransferableEntry.TREE_PATH_FLAVOR);
if (transferData instanceof TreePath) {
TreePath selectionPath = (TreePath) transferData;
System.out.println(selectionPath);
...
}
event.getDropTargetContext().dropComplete(true);
} else {
event.rejectDrop();
}
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
event.rejectDrop();
} catch (IOException e) {
e.printStackTrace();
event.rejectDrop();
}
}
@Override
public void dropActionChanged(DropTargetDragEvent arg0) {
}
}));
Viele Dank
GerdGerdGerd