我有一个JTree
JTree tree = new JTree();
tree.setCellRenderer(// ...);
tree.setCellEditor(// ...);
tree.setEditable(true);
使用其单元格渲染器显示其单元格;如果单击单元格,则使用单元格编辑器显示。有没有一种方法可以仅使用单元格编辑器显示?
答案 0 :(得分: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);
}
});
答案 1 :(得分: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实例。