为了账号安全,请及时绑定邮箱和手机立即绑定

从CellEditorListener获取Edited TreeNode

从CellEditorListener获取Edited TreeNode

ibeautiful 2019-09-06 16:26:26
之前我曾问过在重命名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;}我得到了同样的错误(我希望我会)。我所拥有的应该是有用的,所以剩下的唯一真正的问题是,“我为什么会得到这个错误,我该如何修复它?”但如果有人有更好的方法来实现这个目标,我愿意倾听。
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

我找到了一个非常简单的解决方案。重命名TreeNode时,它最终成为树中唯一选定的节点。因此,我能够使用:


    CustomTreeNode node = (CustomTreeNode) tree.getLastSelectedPathComponent();


查看完整回答
反对 回复 2019-09-06
?
慕后森

TA贡献1802条经验 获得超5个赞

我敢说这不是很理想吗?如果你的JTree选择模型混淆多重选择怎么办,那么重命名不会取消其他选择?或者如果您以某种方式更改了JTree,那么您可以在不选择的情况下进行编辑?我建议一种方法是继承DefaultTreeCellEditor(DTCE),在构造函数中添加CellEditorListener,覆盖getTreeCellEditorComponent,然后通过编辑到字段中生成必须保留的任何数据。DTCE中一个有用的(受保护的)字段是“lastRow”...您可以从editStopped内部访问它以返回到您的节点,在大多数情况下。

查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 618 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信