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
, Конечно, это может вызвать другие виды исключений, но сделать один шаг за раз.