JTree只留下可拖动的叶子

jas*_*ter 7 java swing jtree drag

我只需要使JTree的叶子可拖动,但以下代码片段使树中的每个节点都可拖动:

tree.setDragEnabled(true);
Run Code Online (Sandbox Code Playgroud)

如何将可拖动元素限制为树节点的特定信息,如属性myNode.isLeaf();

tia jaster

Emm*_*urg 6

这可以通过改变来完成TransferHandlerJTree返回一个空Transferable的非叶节点.

这是一个简单的例子:

    JTree tree = new JTree();
    tree.setDragEnabled(true);
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

    tree.setTransferHandler(new TransferHandler(null) {
        public int getSourceActions(JComponent c) {
            return MOVE;
        }

        protected Transferable createTransferable(JComponent c) {
            JTree tree = (JTree) c;
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getSelectionPath().getLastPathComponent();

            if (node.isLeaf()) {
                // TODO create the Transferable instance for the selected leaf
            } else {
                return null;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)