困惑的复选框问题

时间:2012-08-24 10:38:18

标签: java checkbox

我有几个复选框和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

2 个答案:

答案 0 :(得分:2)

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

和utilily方法

private boolean isGreen(Checkbox chk)  
{  
 // return true is checkbox is green  
}

答案 1 :(得分:2)

如上所述,您可以检查一次是否选中了任何一个方框。如果counter2总是显示与counter1相同的值,那可能是一个简单的拼写错误的结果。没有看到你的代码就不可能说。但变量不能只是否决另一个变量。

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

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

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