Java 如何计算检查的JCheckbox的数量?
我的JFrame中有11个不同的复选框,我希望无论何时选中一个复选框,都能得到一个数字,以确定总共选中了多少个复选框。我知道如何设置ItemListener并查看是否已检查其中一个,但我不确定如何检查所有这些 编辑: cblist是一个包含11个JCheckbox的ArrayList。我给了每个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
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文档迭代器。。?