在JTree中拖放时出现ClassCastException

时间:2014-12-22 13:00:28

标签: java swing drag-and-drop jtree defaultmutabletreenode

我想在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 个答案:

答案 0 :(得分:0)

检查the example您正在关注,并且当您想要拖动节点时,如果您说您得到了异常,我认为这就是行(不是必须的唯一行)尽管如此):

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。当然,这可能会引起其他类型的例外,但当时只有一步。