Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我已经在Java Swing树节点中有了一个复选框。但我如何使它可检查?_Java_Swing_Jtree_Treecellrenderer_Defaultmutabletreenode - Fatal编程技术网

我已经在Java Swing树节点中有了一个复选框。但我如何使它可检查?

我已经在Java Swing树节点中有了一个复选框。但我如何使它可检查?,java,swing,jtree,treecellrenderer,defaultmutabletreenode,Java,Swing,Jtree,Treecellrenderer,Defaultmutabletreenode,注意:我不是在问如何在JTree中设置复选框——之前,一位困惑的主持人认为这就是我要问的。我已经在树中设置了复选框。我在问什么类或方法控制复选框的可检查性 为了在树节点中获取复选框,我了解到您必须制作一个复选框渲染器,因此我制作了一个: class CheckboxCellRenderer implements TreeCellRenderer { final static Logger logger = LoggerFactory.getLogger(CheckboxCellRende

注意:我不是在问如何在JTree中设置复选框——之前,一位困惑的主持人认为这就是我要问的。我已经在树中设置了复选框。我在问什么类或方法控制复选框的可检查性

为了在树节点中获取复选框,我了解到您必须制作一个复选框渲染器,因此我制作了一个:

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));”来证明,这使得示例“不可勾选”

请邮寄