Ik ben bezig met het implementeren van dnd in een JTree (binnen een applet).
Probleem is dat ik niet weet hoe ik de nodes van de JTree draggable maak. De code voor de "drops" heb ik wel gevonden:
Hoe krijg ik mijn eigen node class (DocumentMutableTreeNode) als Transferable object?
Ik heb veel gezocht op internet, maar er staat overal 'oude' code, dwz niet volgens de Java 6 manier. Suns eigen documentatie lijkt daar ook wat achter te lopen. Weet iemand hoe het wel (netjes) moet?
Probleem is dat ik niet weet hoe ik de nodes van de JTree draggable maak. De code voor de "drops" heb ik wel gevonden:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| public JTree createTree() { final JTree tree = new JTree(); final DefaultTreeModel model = DefaultTree.getTree(); tree.setModel(model); tree.setRootVisible(false); tree.setDropMode(DropMode.INSERT); tree.setTransferHandler(new TransferHandler() { /** * Inner DataFlavor class. * * @author xxxxxxxxxxxx * */ DataFlavor nodeFlavor = new DataFlavor(nl.impressie.ip.tree.node.DocumentMutableTreeNode.class, "DocumentMutableTreeNode"); public boolean canImport(TransferHandler.TransferSupport support) { if (!support.isDataFlavorSupported(nodeFlavor) || !support.isDrop()) { return false; } JTree.DropLocation dropLocation = (JTree.DropLocation) support.getDropLocation(); return dropLocation.getPath() != null; } public boolean importData(TransferHandler.TransferSupport support) { if (!canImport(support)) { return false; } JTree.DropLocation dropLocation = (JTree.DropLocation) support.getDropLocation(); TreePath path = dropLocation.getPath(); Transferable transferable = support.getTransferable(); DocumentMutableTreeNode transferData; try { transferData = (DocumentMutableTreeNode) transferable.getTransferData(nodeFlavor); } catch (IOException e) { e.printStackTrace(); return false; } catch (UnsupportedFlavorException e) { e.printStackTrace(); return false; } int childIndex = dropLocation.getChildIndex(); if (childIndex == -1) { childIndex = model.getChildCount(path.getLastPathComponent()); } DocumentMutableTreeNode newNode = new DocumentMutableTreeNode(transferData); DocumentMutableTreeNode parentNode = (DocumentMutableTreeNode) path.getLastPathComponent(); model.insertNodeInto(newNode, parentNode, childIndex); TreePath newPath = path.pathByAddingChild(newNode); tree.makeVisible(newPath); tree.scrollRectToVisible(tree.getPathBounds(newPath)); return true; } }); tree.setDragEnabled(true); return tree; } |
Hoe krijg ik mijn eigen node class (DocumentMutableTreeNode) als Transferable object?
Ik heb veel gezocht op internet, maar er staat overal 'oude' code, dwz niet volgens de Java 6 manier. Suns eigen documentatie lijkt daar ook wat achter te lopen. Weet iemand hoe het wel (netjes) moet?
[ Voor 0% gewijzigd door tweakerbee op 10-11-2008 18:46 . Reden: code tags toegevoegd ]
You can't have everything. Where would you put it?