我在Java Swing TreeNode中已经有一个复选框。但是如何使它可检查?

问题描述 投票:0回答:1

[注意:我不是在问如何在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中放置复选框-以前,一个困惑的主持人认为这就是我所问的。我已经在树中有了复选框。我在问什么类或方法...

java swing jtree treecellrenderer defaultmutabletreenode
1个回答
0
投票

为了使复选框为“ checkable”,您似乎需要一个编辑器类。可以通过注释掉“ tree.setCellEditor(new CheckBoxNodeEditor(tree));”这一行来证明这一点。在Abra发布的“ CheckBox节点树示例”中,这使示例“不可检查”。

© www.soinside.com 2019 - 2024. All rights reserved.