之前我曾问过在重命名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;
}
我得到了同样的错误(我希望我会)。我所拥有的应该是有用的,所以剩下的唯一真正的问题是,“我为什么会得到这个错误,我该如何修复它?”但如果有人有更好的方法来实现这个目标,我愿意倾听。
桃花长相依
慕后森