1

我有几个复选框和 2 个计数器...counter1计算使用以下代码检查了多少个复选框

if (isChecked) {
    counter++;
} else {
    counter--;
}

这就像一个魅力,但现在我想要counter2跟踪属于“绿色”组的选中复选框......例如,复选框 1、2、4 和 7 属于“绿色”组,复选框 3、5, 6、8没有。

if (chk1.isChecked() || chk2.isChecked() || chk4.isChecked() || chk7.isChecked()) {
    counter2++;
}

我尝试使用另一个if else来查看检查了多少“绿色”组但是当我使用

System.out.println(counter2);

然后我总是得到counter1. 为什么会这样?是因为counter1检查所有复选框和否决counter2吗?

4

2 回答 2

2
int counter2 = 0; // reset counter    
for (Checkbox chk : allCheckboxes)  
    {   
       if (chk.isChecked() && isGreen(chk)) {
           counter2++;
       }  
    }   
    //...

实用的方法

private boolean isGreen(Checkbox chk)  
{  
 // return true is checkbox is green  
}
于 2012-08-24T11:01:38.123 回答
2

如上文评论中所述,您检查一次是否选中了任何框。如果 counter2 始终显示与 counter1 相同的值,则可能是简单的拼写错误或其他原因造成的。没有看到你的代码就不可能说。但是一个变量不能仅仅推翻另一个变量。

你在使用SwingJCheckBox吗?如果是这样,您可以添加一个ItemListener,如果您还没有的话。然后,您可以动态更新计数器以反映复选框的当前状态。该itemStateChanged方法的代码可能如下所示:

public void itemStateChanged(ItemEvent arg0) {
    if (arg0.getStateChange() == ItemEvent.DESELECTED) { 
        counter--;
    } else {
        counter++;
    } 
    // update label or something
}



ItemListener您可以为您的绿色组使用不同的组,该组另外设置counter2
这使您免于所有迭代检查。

于 2012-08-24T11:22:20.953 回答