【问题标题】:How to check the status of checkbox in java GUI?java - 如何检查java GUI中复选框的状态?
【发布时间】:2010-12-03 08:09:46
【问题描述】:

我在 Java GUI 中有大约 20000 个复选框。现在我想要用户已选中的所有复选框的列表。

我可以通过以下一种方式做到这一点:

jCheckBox1.isSelected();

但我不想为 200 个复选框编写这一行。有没有办法通过 for 循环来做到这一点。

所有复选框的名称都类似于 jCheckBox1、jCheckBox2、jCheckBox3、jCheckBox4 ... jCheckBox200

【问题讨论】:

    标签: java user-interface checkbox


    【解决方案1】:

    好吧,如果您将复选框放在一个数组中...您可以循环执行。

    JCheckBox[] myBoxes = new JCheckBox[200];
    
    //Some creation stuff here
    
    for (int i=0; i<myBoxes.length; ++i) {
       if (myBoxes[i].isSelected()) {
           //Do stuff!
       }
    }
    

    【讨论】:

    • 没有。它们不在数组中。实际上 GUI 代码是生成的代码,所以我无法更改该代码。
    • 哦,这太残酷了。如果你真的很懒,你可以通过循环反射来做到这一点......但是另一种方法是制作一个方法来处理复选框逻辑并调用handleCheckbox(checkbox1)......这样只有handleCheckbox方法被编写为亿万次
    【解决方案2】:

    嗯,我该怎么说?

    好的,您应该首先使用数组来保存您拥有的所有复选框,以便您可以循环访问它。

    如果为时已晚,您可以通过该容器上的所有元素循环选择另一种选择(仅当所有复选框都在同一个容器上时才有效)。像'jPanel1.getComponents()'这样的东西,然后循环它们只看哪个是复选框。

    无论如何..我认为,您应该将所有这些都放在一个数组中,以免自己陷入混乱。

    【讨论】:

    • 您的回答也是可接受的答案,但我只能将一个答案标记为已接受的答案。很抱歉,但非常感谢您的回答。
    【解决方案3】:

    你真的应该把它们放在一个数组或集合中,这样你就可以循环它们了。例如。

    List<JCheckBox> allCheckBoxes = new ArrayList<JCheckBox>()
    allCheckboxes.add(new JCheckBox());
    

    等等

    如果您将所有这些复选框都声明为成员,那么就没有理由将它们放在一个列表中。

    与此同时,您可以在 for 循环中使用狡猾的演员表(如果所有复选框都在同一个面板上)

    boolean allSelected = true;
    for(Component component : myPanel.getComponents()) {
      if(component instanceof JCheckBox) {
        allSelected &= ((JCheckBox)component).isSelected();
      }
    }
    

    我建议在继续之前阅读有关 Java 数组和集合的信息

    http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arrays.html

    http://java.sun.com/docs/books/tutorial/collections/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多