如何计算JCheckboxes的数量?

我的JFrame中有11个不同的复选框,并且希望能够在检查一个总数被检查时获得一个数字。 我知道如何设置一个ItemListener,看看是否有一个被检查,但我不知道如何检查所有这些..

编辑:

cblist是一个包含11个JCheckBoxes的ArrayList。 我给每个JCheckBox一个项目监听器,这里是单击复选框时使用的类…

private class CheckClass implements ItemListener{ public void itemStateChanged(ItemEvent event){ for(cblist.isChecked){ ingnum++; } } } 

在for循环中,我如何测试ArrayList的所有元素..我理解我的语法现在不正确。

一种方法:将所有JCheckBox放在一个数组或ArrayList并在需要时,只需遍历列表以查看选中了哪些复选框。

另一种可能的解决方案:如果您有表格结构,请使用在其模型中保存布尔值的JTable,然后在需要时迭代TableModel的行以查看哪些行包含Boolean.TRUE值。

我的建议(可能不是最好的)是将所有选中的CheckBox保留在列表中。

所以对于所有JCheckBoxex的监听器将是这样的:

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

要知道检查了多少个checkBox,只需计算列表的大小。

问候。

你可以保持一个全局计数器countChecked并使框架implements ItemListener

对于框架chkBox.addItemListener(this)所有JCheckBox并处理事件

 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--; } } } 

为所有复选框添加“ActionPerformed”事件侦听器,并在事件处理程序方法中调用此方法以获取已选中复选框的数量:

 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应该返回主面板上的组件。