簡體   English   中英

我已經在 J​​ava Swing TreeNode 中有一個復選框。 但是我如何使它可檢查?

[英]I already have a checkbox in a Java Swing TreeNode. But how do I make it checkable?

注意:我不是在問如何在 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;
    }
}

這會在樹節點中創建復選框。 但由於某種原因,這使得復選框不可選中,當我單擊它時沒有任何反應。 為什么在渲染器中創建復選框會“破壞”復選框? 如何使復選框可勾選(即當我單擊復選框時它被選中,而當我再次單擊它時它被取消選中)?

為了使復選框“可檢查”,看起來您需要一個編輯器類。 這可以通過注釋掉“tree.setCellEditor(new CheckBoxNodeEditor(tree));”這一行來證明。 在 Abra 發布的“CheckBox 節點樹示例”中,這使得示例“不可檢查”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM