【发布时间】:2012-06-21 21:45:26
【问题描述】:
之前我问过如何在重命名 TreeNode 时触发事件 (here)。我的问题得到了回答,但我遇到了另一个问题。我需要访问 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: 我已经做了一个小例子来说明我正在尝试完成的事情,可以在 here 找到(这是一个 Eclipse 存档)。
【问题讨论】:
-
可怕的是 CellEditor(JTextField 或 JComboBox)仅在第 3 个可用。鼠标点击,
-
@mKorbel:+1 对比
TreeCellEditor接口与默认实现的答案。欢迎您对我的approach 进行批判性评论。
标签: java swing events rename treenode