[注意:我不是在问如何在JTree中放置复选框-以前,一个困惑的主持人认为这就是我所问的。我已经在树中有了复选框。我问什么类或方法控制复选框的可检查性...
[为了在Tree节点内获得一个复选框,我读到您必须制作一个复选框渲染器,所以我做了一个:]]
class CheckboxCellRenderer implements TreeCellRenderer { final static Logger logger = LoggerFactory.getLogger(CheckboxCellRenderer.class); JLabel firstNameLabel = new JLabel(" "); JPanel renderer = new JPanel(); JCheckBox checkbox; DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer(); public CheckboxCellRenderer() { super(); checkbox = new JCheckBox(firstNameLabel.getText(), false); renderer.add(checkbox); renderer.add(firstNameLabel); } public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Component returnValue = null; firstNameLabel.setText(value.toString()); if ((value != null) && (value instanceof DefaultMutableTreeNode)) { Object userObject = ((DefaultMutableTreeNode) value).getUserObject(); renderer.setEnabled(tree.isEnabled()); if(((DefaultMutableTreeNode) value).getLevel()==1){ returnValue = renderer; } } if (returnValue == null) { returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); } return returnValue; } }
这将在树节点中创建复选框。但是由于某种原因,这使得该复选框不可选中,并且当我单击它时什么也没有发生。为什么在渲染器中创建复选框会“破坏”该复选框?如何使复选框处于可检查状态(即,当我单击该复选框时它会被选中,而当我再次单击它时它会被取消选中)?
[注意:我不是在问如何在JTree中放置复选框-以前,一个困惑的主持人认为这就是我所问的。我已经在树中有了复选框。我在问什么类或方法...
为了使复选框为“ checkable”,您似乎需要一个编辑器类。可以通过注释掉“ tree.setCellEditor(new CheckBoxNodeEditor(tree));”这一行来证明这一点。在Abra发布的“ CheckBox节点树示例”中,这使示例“不可检查”。