我在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>
答案 0 :(得分:4)
什么是“这个”? JFrame?如果是这样,您了解直接在JFrame上使用该搜索获得的唯一组件是contentPane,并且您的JCheckBox可能在组件层次结构中比您正在查看的更深。
为什么不让自己更容易,并将JCheckBox放在一个集合中,例如ArrayList。或者如果数量很少,请使用其变量名称。
答案 1 :(得分:3)
由于您没有显示表单的创建(什么是JForm
,顺便说一句?),我最好的猜测是复选框不是this
的子项,而是某些面板或其他容器这本身就是this
的孩子。如果你想按照你的方法迭代所有组件,你需要递归地执行它,即if (jb instancof Container) <iterate over children>
。
但这种方法并不是那么好。您需要记住复选框,以便您可以轻松查询其状态,或者您应该使用模型,在JCheckBox
的情况下,ButtonModel
可能会改变包含您的状态的拟合数据结构相关数据。
答案 2 :(得分:3)
也许您的复选框位于另一个容器(如JPanel)中,在这种情况下,您应该在容器组件上调用getcomponents,否则您可以创建一个在jframe中找到另一个容器组件时递归调用的方法,这样您就可以遍历所有等级...