之前我问过如何在重命名 TreeNode 时触发事件(此处)。我的问题得到了回答,但我遇到了另一个问题。我需要访问 CellEditorListener 的 editingStopped 事件中正在编辑的 TreeNode。这是我必须这样做的代码:
package com.gamecreator;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultTreeCellEditor;
public class CustomCellEditorListener implements CellEditorListener {
public CustomCellEditorListener() {
}
public void editingCanceled(ChangeEvent e) {
}
public void editingStopped(ChangeEvent e) {
DefaultTreeCellEditor editor = (DefaultTreeCellEditor) e.getSource(); //This gives me the error.
CustomTreeNode node = //What do I put here???;
node.getResource().setName((String) node.getUserObject());
//For debugging
System.out.println(node.getResource().getName());
}
}
我收到此错误:
线程“AWT-EventQueue-0”中的异常 java.lang.ClassCastException:javax.swing.tree.DefaultTreeCellEditor$1 无法转换为 javax.swing.tree.DefaultTreeCellEditor
编辑:在另一次尝试中,我在 CustomCellEditorListener 中使用了这段代码
public void editingStopped(ChangeEvent e) {
TreePath path = ((CustomTreeCellEditor) e.getSource()).getLastPath(); //This gives me the error.
CustomTreeNode node = (CustomTreeNode) path.getLastPathComponent();
node.getResource().setName((String) node.getUserObject());
//For debugging
System.out.println(node.getResource().getName());
}
以及 CustomTreeCellEditor 中的这段代码
public TreePath getLastPath() {
return lastPath;
}
我得到了同样的错误(我希望我会)。我所拥有的应该可以工作,所以剩下的唯一真正的问题是,“为什么我会收到错误,我该如何解决?”但是如果有人有更好的方法来完成这个,我愿意倾听。
编辑 2:我做了一个小例子来说明我想要完成的事情,可以在这里找到(这是一个 Eclipse 档案)。