Как проверить, какие флажки отмечены в JFrame? - PullRequest
1 голос
/ 01 февраля 2012

У меня есть несколько флажков в 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>

Ответы [ 3 ]

4 голосов
/ 01 февраля 2012

Что такое "это"? JFrame? Если это так, вы понимаете, что единственным компонентом непосредственно в JFrame, который вы получите с помощью этого поиска, является contentPane, и что ваши JCheckBoxes, вероятно, глубже в иерархии компонентов, чем там, где вы ищете.

Почему бы не упростить себе задачу и не поместить JCheckBoxes в коллекцию, например ArrayList. Или, если их немного, используйте имя их переменной.

3 голосов
/ 01 февраля 2012

Возможно, ваши флажки находятся внутри другого контейнера, такого как JPanel, в этом случае вам следует вызывать getcomponents для компонентов контейнера, в противном случае вы можете создать метод, который вы вызываете рекурсивно, когда вы найдете другие компоненты контейнера внутри jframe, так что вы можете обойти всеиерархия ...

3 голосов
/ 01 февраля 2012

Поскольку вы не показываете создание формы (что такое JForm, кстати?), Я думаю, что флажки - это не дочерние элементы this, а некоторая панель или другой контейнер, который сам является дочерним. this. Если вы хотите следовать своему подходу итерации по всем компонентам, вам нужно сделать это рекурсивно, то есть if (jb instancof Container) <iterate over children>.

Но такой подход не очень хорош. Вам нужно либо помнить флажки, чтобы вы могли легко запрашивать их состояние, либо вам следует использовать модели, в случае JCheckBox это будет ButtonModel, что может изменить состояние подходящей структуры данных, содержащей ваши релевантные данные.

...