Java 如何计算检查的JCheckbox的数量?

Java 如何计算检查的JCheckbox的数量?,java,swing,jframe,jcheckbox,Java,Swing,Jframe,Jcheckbox,我的JFrame中有11个不同的复选框,我希望无论何时选中一个复选框,都能得到一个数字,以确定总共选中了多少个复选框。我知道如何设置ItemListener并查看是否已检查其中一个,但我不确定如何检查所有这些 编辑: cblist是一个包含11个JCheckbox的ArrayList。我给了每个JCheckBox一个条目侦听器,下面是单击复选框时使用的类 private class CheckClass implements ItemListener{ public void ite

我的JFrame中有11个不同的复选框,我希望无论何时选中一个复选框,都能得到一个数字,以确定总共选中了多少个复选框。我知道如何设置ItemListener并查看是否已检查其中一个,但我不确定如何检查所有这些

编辑:

cblist是一个包含11个JCheckbox的ArrayList。我给了每个JCheckBox一个条目侦听器,下面是单击复选框时使用的类

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

      }
  }

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

一种方法:将所有jcheckbox放在一个数组或
ArrayList
中,如果需要,只需在列表中迭代查看选中了哪些复选框

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

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

因此,所有jcheckbox的侦听器将如下所示:

void stateChanged(ChangeEvent e){
    if( CheckBox is checked){
       // add the checkbox in the list.
    } else {
        // remove CheckBox in the list.
     }
}
要知道选中了多少复选框,只需计算列表的大小


注意。

您可以选中全局计数器
count
,并使帧
实现ItemListener

对于框架中的所有
JCheckBox
chkBox.addItemListener(此)
,并处理事件

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

您可以为每个ItemListener提供一个对您创建的对象的引用,该对象有两个方法;一个用于增加选中复选框的数量,另一个用于减少选中复选框的数量。每当用户选择或取消选择复选框时,您都可以调用该类的appropiate方法。然后,您只需要创建一个方法来读取该类中的数字,您就完成了=)@bartvbl:在我看来,您的评论是一个有效的答案。为什么不这样发布它,这样我们就可以对它进行投票呢?如果您只关心所选JCheckbox的数量,只需定义一个整数计数器,并为每个ItemListener或ActionListener添加此If语句。每次选中复选框时,计数器都会递增,每次取消选中复选框时,计数器都会递减。if(jCheckBox1.isSelected())计数器++;否则计数器--;测试arraylist中的所有JCheckbox以确定它们是否被选中,我的代码看起来会是什么样子?我不知道如何编写代码来检查AL中的每个元素。@JesusSqueegee:您可以使用一个简单的for循环,从ArrayList中获取每个JCheckBox实例,通过if块中的
isSelected()
方法(了解API——它现在应该是您最好的朋友)检查其所选内容,如果为true,它递增一个int计数器变量。试一试,让我们看看你有什么想法。非常感谢你,但我的问题其实更简单哈哈。我理解这个过程,但我不知道测试ArrayList中每个元素的语法是什么。@JesusSqueegee:我想我刚刚告诉过你——你用for循环遍历ArrayList——这只是最基本的Java。请澄清——到底是什么让你困惑?请显示您尝试对原始问题进行编辑的内容。已编辑。我试图声明的迭代器是HTML文档迭代器。。?