我有一个带有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;
}
}
或者,您可以使用附加到每个
ItemListener
的JCheckBox
来跟踪复选框的计数:int selectionCount;
ItemListener boxListener = new ItemListener() {
@Override public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
selectionCount++;
} else {
selectionCount--;
}
}
};
(请注意,如果这是
ItemListener
的全部工作,则可以将一个实例附加到所有框上。)selectionCount
应该初始化为最初选中的框数。然后,在代码中的适当点,您可以简单地测试selectionCount
是否大于零。