ClassCastException при перетаскивании в JTree

Я хочу сделать перетаскивание в JTree, Я следую этому уроку:

http://www.java2s.com/Code/Java/Swing-JFC/DnDdraganddropJTreecode.htm

К сожалению у меня в JTree узлы с моим собственным классом, и когда я хочу перетащить, я получил это исключение:

java.lang.ClassCastException: MyClass cannot be cast to javax.swing.tree.DefaultMutableTreeNode.

Как это решить? Мне нужно использовать MyClass вместо DefaultMutableTreeNode,

1 ответ

Изучая пример, которому вы следуете, и учитывая, что вы говорите, что получаете исключение, когда хотите перетащить узел, я думаю, что это строка (но не единственная, которая должна быть исправлена):

class TreeDragSource implements DragSourceListener, DragGestureListener {
    ...
    public void dragGestureRecognized(DragGestureEvent dge) {
        TreePath path = sourceTree.getSelectionPath();
        if ((path == null) || (path.getPathCount() <= 1)) {
          // We can't move the root node or an empty selection
          return;
        }
        oldNode = (DefaultMutableTreeNode) path.getLastPathComponent(); // ClassCastException Here!
        transferable = new TransferableTreeNode(path);
        source.startDrag(dge, DragSource.DefaultMoveNoDrop, transferable, this);
    }
    ...
}

Итак, если ваша TreeModel содержит только MyClass тип узла (я предполагаю, что ваш класс реализует, по крайней мере, интерфейс TreeNode, лучше, если MutableTreeNode), тогда вы должны были бы прекратить последний компонент пути к вашему классу, соответственно:

    public void dragGestureRecognized(DragGestureEvent dge) {
        ...
        oldNode = (MyClass) path.getLastPathComponent();
        ...
    }

Как я уже сказал, вам придется заменить все приведения DefaultMutableTreeNode в MyClass, Конечно, это может вызвать другие виды исключений, но сделать один шаг за раз.

Другие вопросы по тегам