我有一个带有16个JCheckBoxes的Java JPanel,我想确保用户在提交表单之前至少选择一个。我知道要执行此操作的唯一方法是查看“ isSelected()”方法的布尔值的巨大if语句,但这似乎效率很低。
所以我想知道是否有一种更快的方法来检查所有未选中的框。

最佳答案

您不需要if语句。您可以使用||使用大的逻辑表达式来做到这一点:

boolean somethingChecked = box1.isSelected()
    || box2.isSelected()
    || ...;


或者,如果这些框位于数组中(更可取),则循环:

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


或者,您可以使用附加到每个ItemListenerJCheckBox来跟踪复选框的计数:

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


(请注意,如果这是ItemListener的全部工作,则可以将一个实例附加到所有框上。)selectionCount应该初始化为最初选中的框数。然后,在代码中的适当点,您可以简单地测试selectionCount是否大于零。

10-04 18:13