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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
   |  
import java.awt.BorderLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
 
import javax.swing.DropMode;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.TransferHandler;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
 
 
public class Main extends JFrame {
 
    public Main() {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode("1");
        DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("2");
        DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("3");
        DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("4");
        DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("5");
        DefaultMutableTreeNode node5 = new DefaultMutableTreeNode("6");
 
        node.add(node1);
        node.add(node2);
        node1.add(node3);
        node1.add(node4);
        node2.add(node5);
 
        JTree tree = new JTree(node);
        tree.setDragEnabled(true);
        tree.setTransferHandler(new MyTransferHandler());
        tree.setDropMode(DropMode.ON_OR_INSERT);
        add(tree, BorderLayout.CENTER);
 
 
        JTextField fiels = new JTextField();
        fiels.setDragEnabled(true);
        add(fiels, BorderLayout.NORTH);
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new Main();
    }
 
    class MyTransferHandler extends TransferHandler {
 
 
        public boolean importData(JComponent comp, Transferable t) {
            return false;
        }
 
        public boolean importData(TransferSupport support) {
            if (support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
 
                JTree.DropLocation dl = (JTree.DropLocation) support
                        .getDropLocation();
 
                TreePath path = dl.getPath();
                int childIndex = dl.getChildIndex();
 
                Transferable trans = support.getTransferable();
 
                String data;
                JTree tree = ((JTree) support.getComponent());
                DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel();
                try {
                    data = (String) trans
                            .getTransferData(DataFlavor.stringFlavor);
                } catch (UnsupportedFlavorException e) {
                    return false;
                } catch (IOException e) {
                    return false;
                }
 
                if (childIndex == -1) {
                    childIndex = treeModel.getChildCount(path
                            .getLastPathComponent());
                }
 
                DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(
                        data);
                DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) path
                        .getLastPathComponent();
                treeModel.insertNodeInto(newNode, parentNode, childIndex);
 
                TreePath newPath = path.pathByAddingChild(newNode);
                tree.makeVisible(newPath);
                tree.scrollRectToVisible(tree.getPathBounds(newPath));
 
                return true;
 
            }
            return false;
        }
 
        public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
            return false;
        }
 
        public boolean canImport(TransferSupport support) {
            if (support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                return true;
            }
            return false;
        }
 
    }
 
} | 
Partager