gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:27:34 25 4
gpt4 key购买 nike

我正在显示一个自定义对象树,我已经设置了自定义 CellTreeEditorCellTreeRenderer

现在我真正想要的是始终将所有对象显示为“编辑模式”。现在,我的 CellTreeRenderer.getTreeCellRendererComponent()CellTreeEditor.getTreeCellEditorComponent() 几乎完全相同。这种方法可行,但在我进行任何编辑之前,我仍然必须单击一个节点以聚焦它。

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

******更新****

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

JTree showing renderer and editor components

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

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

最佳答案

扩展我的评论:不,你不想让你的编辑器跨单元格共享(讨厌的事情开始发生)相反,添加一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com