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