JTree делает только листья перетаскиваемыми - PullRequest
7 голосов
/ 26 июля 2011

Мне нужно сделать перетаскиваемым только листья JTree, но следующие фрагменты кода делают каждый узел дерева перетаскиваемым:

tree.setDragEnabled(true);

Как я могу ограничить перетаскиваемый элемент конкретными сведениями узла дерева, такими каксвойство myNode.isLeaf ();

tia jaster

1 Ответ

6 голосов
/ 26 июля 2011

Это можно сделать, изменив TransferHandler из JTree, чтобы он возвращал ноль 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;
            }
        }
    });
...