有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java快速查看是否未选中所有复选框的方法

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


共 (2) 个答案

  1. # 1 楼答案

    我相信这会达到目的:

     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并获取其上的所有组件。然后选中所有选项,如果是复选框,则将组件强制转换为复选框,以访问isSelected方法。如果选中任何复选框,它将返回true;如果完成foreach而不返回任何true,则表示未选中任何复选框

  2. # 2 楼答案

    您不需要if语句。可以使用||使用一个大的逻辑表达式:

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

    或者,如果盒子在一个数组中(更可取),则循环:

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

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

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

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