我已经在Java Swing树节点中有了一个复选框。但我如何使它可检查?
注意:我不是在问如何在JTree中设置复选框——之前,一位困惑的主持人认为这就是我要问的。我已经在树中设置了复选框。我在问什么类或方法控制复选框的可检查性 为了在树节点中获取复选框,我了解到您必须制作一个复选框渲染器,因此我制作了一个:我已经在Java Swing树节点中有了一个复选框。但我如何使它可检查?,java,swing,jtree,treecellrenderer,defaultmutabletreenode,Java,Swing,Jtree,Treecellrenderer,Defaultmutabletreenode,注意:我不是在问如何在JTree中设置复选框——之前,一位困惑的主持人认为这就是我要问的。我已经在树中设置了复选框。我在问什么类或方法控制复选框的可检查性 为了在树节点中获取复选框,我了解到您必须制作一个复选框渲染器,因此我制作了一个: class CheckboxCellRenderer implements TreeCellRenderer { final static Logger logger = LoggerFactory.getLogger(CheckboxCellRende
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;
}
}
这将在树节点中创建复选框。但由于某些原因,这使得复选框不可选中,当我单击它时,不会发生任何事情。为什么在渲染器中创建复选框会“破坏”复选框?如何使复选框可选中(即,当我单击复选框时,复选框被选中,当我再次单击复选框时,复选框被取消选中)?为了使复选框可选中,您似乎需要一个编辑器类。这可以通过在Abra发布的“复选框节点树示例”中注释掉行“tree.setCellEditor(new CheckBoxNodeEditor(tree));”来证明,这使得示例“不可勾选” 请邮寄