快速查看是否取消选中所有复选框的方法

时间:2015-06-29 19:22:27

标签: java swing checkbox jpanel

我有一个带有16个JCheckBoxes的java JPanel,我想确保用户在提交表单之前至少选择一个。我知道这样做的唯一方法是查看“isSelected()”方法的布尔值的巨大if语句,但这似乎效率低下。 所以我想知道是否有更快的方法来检查所有的盒子是否未经检查。

2 个答案:

答案 0 :(得分:4)

您不需要if声明。您可以使用||

使用大型逻辑表达式来完成此操作
boolean somethingChecked = box1.isSelected()
    || box2.isSelected()
    || ...;

或者,如果这些框在一个数组中(更受欢迎),则循环:

boolean somethingSelected = false;
for (JCheckBox box : boxes) {
    if (box.isSelected()) {
        somethingSelected = true;
        break;
    }
}

或者,您可以使用附加到每个JCheckBox的{​​{3}}来跟踪复选框的数量:

int selectionCount;
ItemListener boxListener = new ItemListener() {
    @Override public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            selectionCount++;
        } else {
            selectionCount--;
        }
    }
};

(请注意,如果这只是ItemListener正在进行的操作,则可以将单个实例附加到所有框。)selectionCount应初始化为最初检查的框数。然后在代码中的适当位置,您可以简单地测试selectionCount是否大于零。

答案 1 :(得分:3)

这将是我认为的伎俩:

 public boolean validatePanel(JPanel panel) {   
    for (Component component : panel.getComponents()) {
        if(component instanceof JCheckBox){
            JCheckBox c = (JCheckBox) component;
            if(c.isSelected()){
            return true;
            }
        }
    }
    return false;
}

该方法接收JPanel并获取其上的所有组件。然后检查所有,如果是复选框,则会将Component强制转换为CheckBox以访问isSelected方法。如果选中任何复选框,它将返回true,如果它完成foreach而没有返回任何true,则表示没有选中复选框。