How to count number of JCheckboxes checked?

后端 未结 4 1088
旧时难觅i
旧时难觅i 2020-12-21 07:26

I have 11 different checkboxes in my JFrame and want to be able to get a number whenever one is checked for how many total are checked. I know how to set up an ItemListener

相关标签:
4条回答
  • 2020-12-21 07:51

    you can keep a global counter countChecked and make the frame implements ItemListener

    for all the JCheckBox in your frame chkBox.addItemListener(this) and handle the events

    public class MyFrame extends JFrame implements ItemListener{
    
    private int countChecked = 0;
    private JPanel contentPane;
        public MyFrame() {
        contentPane = new JPanel();
        setContentPane(contentPane);
        JCheckBox chckbx = new JCheckBox("New check box");
        contentPane.add(chckbx, BorderLayout.CENTER);
        chckbx.addItemListener(this);
    }
    
    @Override
    public void itemStateChanged(ItemEvent ie) {
        if(ie.getSource().getClass() == JCheckBox.class)
        {
            if(ie.getStateChange() == ie.SELECTED)
                countChecked++;
            else if(ie.getStateChange() == ie.DESELECTED)
                countChecked--;
        }
    
    } 
    }
    
    0 讨论(0)
  • 2020-12-21 07:59

    One way: put all of the JCheckBoxes in an array or ArrayList<JCheckBox> and when desired, simply iterate through the list to see which check boxes are selected.

    Another possible solution: if you have a tabular structure, use a JTable that holds Booleans in its model, then when desired iterate through the rows of the TableModel to see which rows hold Boolean.TRUE values.

    0 讨论(0)
  • 2020-12-21 08:12

    My proposal (maybe not the best) is to keep all checked CheckBox in a List.

    So to listener for all JCheckBoxex will be like this :

    void stateChanged(ChangeEvent e){
        if( CheckBox is checked){
           // add the checkbox in the list.
        } else {
            // remove CheckBox in the list.
         }
    }
    

    To know how many checkBox are checked, just count the size of the list.

    Regards.

    0 讨论(0)
  • 2020-12-21 08:13

    add "ActionPerformed" event listener for all of your checkboxes & call this method inside event handler method to get number of checked checkboxes:

    int countCheckedCheckBoxes(){
        Component[] cs = getRootPane().getComponents();
        int checkNums = 0;
        for(Component c : cs){
            if(c instanceof JCheckBox){
                if(((JCheckBox)c).isSelected()){
                    checkNums++;
                }
            }
        }
        return checkNums;
    }
    

    getRootPane should return your main panel which components are located on it.

    0 讨论(0)
提交回复
热议问题