1

我有一个 JTree

JTree tree = new JTree();
tree.setCellRenderer(// ...);
tree.setCellEditor(// ...);
tree.setEditable(true);

使用它的单元格渲染器来显示它的单元格;如果单击单元格,则它们使用单​​元格编辑器显示。有没有办法只能使用单元格编辑器显示?

  1. 我试图只删除渲染器。这不起作用,因为 JTree 使用其默认的单元格渲染器。
  2. 这类似于此问题,但是,该问题似乎不包含与我的特定问题相关的答案。
4

2 回答 2

1

最简单的做法是创建一个返回关联的 TreeCellEditor 组件的 TreeCellRenderer。

尝试这样的事情:

        tree.setCellRenderer(new TreeCellRenderer() {
        @Override
        public Component getTreeCellRendererComponent(
                JTree tree, Object value, 
                boolean selected, boolean expanded,
                boolean leaf, int row, boolean hasFocus) {
            return tree.getCellEditor().getTreeCellEditorComponent(tree, value, 
                                                      selected, expanded, leaf, row);
        }

    });
于 2013-02-26T17:44:09.040 回答
0

单元格编辑器和渲染器的问题在于,应该重新使用一个 GUI 组件来绘制列表中的每个元素(渲染器),并且一次只能编辑一行(编辑器)。如果你打破了单一的 GUI 组件规则,Swing GUI 的行为就会变得笨拙、缓慢甚至完全崩溃。

换句话说,为单元格渲染器使用编辑组件(如 dropdiwn)会遇到问题,因为应该为列表的每个元素使用相同的 JComboBox。如果为每个树元素创建不同的渲染器对象,则会遇到内存问题和其他异常行为

如果你真的想为渲染器使用下拉菜单,你可以通过自己实现一个 TreeCellRenderer 来实现,它在public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)被调用时返回一个唯一的 JComboBox 实例。

于 2013-02-26T17:48:56.137 回答