java - JTree,始终显示 "edit mode"中的所有节点

标签 java swing jtree

我正在显示自定义对象树,并且设置了自定义 CellTreeEditorCellTreeRenderer

现在我真正想要的是始终像“编辑模式”一样显示所有对象。现在,我的 CellTreeRenderer.getTreeCellRendererComponent()CellTreeEditor.getTreeCellEditorComponent() 实现几乎相同。这种方法可行,但我仍然必须单击一个节点来将其聚焦,然后才能进行任何编辑。

有没有更明智的方法来做到这一点,也许就像说永远不应该使用渲染器,默认为我的 CellTreeEditor

*****更新****

澄清一下:我有一棵树看起来像这样(是的,它看起来也像垃圾,但这不是重点):

JTree showing renderer and editor components

现在,我通过拥有一个渲染器和一个从 getTreeCell[Renderer|Editor]Component() 返回相同组件的编辑器来实现此目的。

如果我单击渲染器提供的组合框中的向下箭头,它会在打开下拉列表时轻微闪烁,但随后会被我的编辑器组件中断并替换。这意味着我必须再次单击它才能打开下拉菜单。这是我想避免的行为。

最佳答案

扩展我的评论:不,你不想让你的编辑器在单元格之间共享(讨厌的事情开始发生)相反,添加一个 TreeCellListener 来监听引导(又名:聚焦)选择路径的变化,然后显式地开始在该路径上进行编辑

    final JXTree tree = new JXTree();
    tree.setEditable(true);
    tree.expandAll();
    TreeSelectionListener l = new TreeSelectionListener() {

        @Override
        public void valueChanged(TreeSelectionEvent e) {
            final TreePath path = e.getNewLeadSelectionPath();
            if (path != null) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        tree.startEditingAtPath(path);
                    }
                });
            }
        }

    };
    tree.addTreeSelectionListener(l);

真正使其工作的技巧是常见的:将自定义 react 包装到 invokeLater 中以确保树的内部更新完成

关于java - JTree,始终显示 "edit mode"中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9604095/

相关文章:

java - 在 java 中使用 MVC 设置 KeyListener

java - 我可以向 JFrame 添加 CSS 文件吗?

java - 如何在JTree中添加windows目录结构?

java - 如何为 JTree 上的各个节点设置自定义图标?

java - 通过 DP 的子集和

java - Hibernate 多对多连接表不为继承的实体保留

java - 如何在 JAVA 中使用另一个 jar 中的类?

java - 将 ActionListener 添加到面板 - 面板实现 ActionListener 与 Panel HAS A ActionListener

Java:递归地将节点添加到 JTree

java - 提取GIT存储库信息