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