【问题标题】:How to check what checkboxes are checked within a JFrame?如何检查在 JFrame 中选中了哪些复选框?
【发布时间】:2012-01-31 21:45:26
【问题描述】:

我在 JForm(SubComponents) 中有几个复选框,我正在使用此代码检查哪些复选框被选中:

countItems = 0;
    for(Component jb: this.getComponents())
    {
        if((jb instanceof JCheckBox) ) //I never get pass this point(its always false)
        {   
            JCheckBox chbox = (JCheckBox)jb;
            if(chbox.isSelected())
            countItems++;
        }
    }

有谁知道问题出在哪里?

谢谢

编辑:这里是 xml:

<Form version="" maxVersion"" type="">
   <AuxValues>
   </AuxValues>
   <Layout>
   </Layout>
   <SubComponents>
     <Component class="javax.swing.JCheckBox" name="jCheckBox1">
       <Properties>
         <Property name="text" type="java.lang.String" value="Cheese"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JCheckBox" name="jCheckBox2">
       <Properties>
         <Property name="text" type="java.lang.String" value="Sausage"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JCheckBox" name="jCheckBox3">
       <Properties>
         <Property name="text" type="java.lang.String" value="Pepperoni"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JCheckBox" name="jCheckBox4">
       <Properties>
         <Property name="text" type="java.lang.String" value="Mushroom"/>
       </Properties>
     </Component>
  </SubComponents>
</Form>

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing jframe jcheckbox


【解决方案1】:

什么是“这个”? JFrame?如果是这样,您就会明白,您将通过该搜索获得的唯一直接位于 JFrame 上的组件是 contentPane,并且您的 JCheckBox 可能在组件层次结构中比您正在查找的位置更深。

为什么不让自己更轻松,将 JCheckBoxes 放在一个集合中,例如 ArrayList。或者如果数量很少,使用它们的变量名。

【讨论】:

  • @mKorbel:我通常将 ButtonGroup 用于 JRadioButtons,而不是 JCheckBoxes,因为通常的做法规定 JCheckBox 选择不应相互排斥。
【解决方案2】:

也许您的复选框位于另一个容器(例如 JPanel)中,在这种情况下,您应该在容器组件上调用 getcomponents,否则您可以创建一个方法,当您在 jframe 中找到另一个容器组件时递归调用该方法,这样您就可以遍历所有层次结构...

【讨论】:

  • 我添加了一个 Jpanel 并在 Jpannel 中检查了它们,它工作正常。谢谢!
【解决方案3】:

由于您没有显示表单的创建(什么是 JForm,顺便说一句?),我最好的猜测是复选框不是 this 的子级,而是某些面板或其他容器本身是子级this。如果您想遵循迭代所有组件的方法,则需要递归地进行,即if (jb instancof Container) &lt;iterate over children&gt;

但是这种方法不是很好。您需要记住复选框,以便轻松查询它们的状态,或者您应该使用模型,在 JCheckBox 的情况下,它将是 ButtonModel,它可能会改变保存相关数据的合适数据结构的状态。

【讨论】:

  • 这个 XML 来自哪里?一些 GUI 构建器?您在什么上下文(方法、类)中执行您呈现的代码的 sn-p?
猜你喜欢
  • 2020-09-18
  • 2020-11-14
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多