swing - 触发树单元格编辑事件

Posted

技术标签:

【中文标题】swing - 触发树单元格编辑事件【英文标题】:swing - Triggering Tree Cell Edit Event 【发布时间】:2012-12-20 12:51:22 【问题描述】:

我有一个带有可编辑节点的 JTree。

如何以编程方式触发树单元格编辑事件,即调出节点重命名文本框来代替突出显示的节点,就像用户手动突出显示它并按下 F2 一样?

基本上,我想添加一个“重命名”菜单项或工具栏按钮,以提示用户了解树的特定功能,并且我希望它在用户突出显示节点时与 F2 键功能相同。

【问题讨论】:

【参考方案1】:

1) 选择某个节点(通过Mouse / KeyBoard 事件)并通过TreeSelectionListener 侦听,然后选择的路径具有唯一 ID

2)将Swing Action添加到JMenuItem(在JPopup???,从您的问题中不清楚,如何从/到获取节点???)

3) 创建类、虚空等并触发

SwingUtilities.invokeLater(new Runnable()   
    public void run()   
        tree.startEditingAtPath(path);  
      
);

4) 基于@Michael Dunn 对我的question on another forum 的回答

【讨论】:

3 做到了。这就是我一直在寻找的;不知何故,在浏览了 javadoc 之后我找不到它。 -_- 非常感谢。【参考方案2】:

看到这个tutorial

为了使树节点中的文本可编辑,我们调用 树上的 setEditable(true)。当用户完成编辑 节点,模型生成一个树模型事件,告诉任何侦听器 - 包括 JTree - 树节点已更改。注意 虽然 DefaultMutableTreeNode 具有更改节点的方法 内容,更改应通过 DefaultTreeModel 覆盖方法。 否则,不会生成树模型事件,并且监听器 比如树不会知道更新。

编辑:

要为节点添加上下文菜单,请参阅此问题:Right-click context menu for Java JTree?。

【讨论】:

感谢您的回复,但这并不是我真正要问的。诚然,我不是很清楚。没关系,现在已经回答了。 :) 如果我不想显示整个路径以进行重命名,我只需要显示叶子节点的名称

以上是关于swing - 触发树单元格编辑事件的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing 获取table 单元格,设置该单元格为可编辑

处于编辑模式的单元格不会在C#中触发KeyDown事件

Ext JS 3.4:用于单元格编辑的事件监听器

Element-ui 之 解决可编辑表格点击行操作或者选择日期选择器(统归为可编辑单元格)仍触发行点击事件的问题

Swing-JTable检测单元格数据变更事件

EXCEL单击单元格事件