2012-01-31 133 views
1

我有一個JForm(子)內的幾個複選框,我使用此代碼檢查哪一個的檢查:如何檢查在JFrame中檢查了哪些複選框?

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> 
+1

爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-02-01 03:06:58

回答

3

也許您的複選框位於另一個容器中,例如JPanel,在這種情況下,您應該在容器組件上調用getcomponents,否則可以創建一個方法,當您在jframe中查找另一個容器組件時,可以調用遞歸方法,所有的等級...

+0

編輯後請檢查我的帖子我添加了xml。謝謝! – gumenimeda 2012-02-01 02:58:12

+0

我添加了一個Jpanel,並在Jpannel內檢查它們,它工作。謝謝! – gumenimeda 2012-02-03 00:09:25

4

什麼是 「本」? JFrame?如果是這樣,您就會明白,通過該搜索直接獲取的JFrame上的唯一組件就是contentPane,並且組件層次結構中的JCheckBox可能比您要查找的更深。

爲什麼不讓自己更容易,並將JCheckBox放入一個集合中,如ArrayList。或者如果數量很少,則使用它們的變量名稱。

+1

或進入ButtonGroup +1 – mKorbel 2012-01-31 22:45:31

+0

@mKorbel:我通常保留ButtonGroup用於JRadioButtons,而不是JCheckBoxes,如慣例所示,JCheckBox選擇不應該是互斥的。 – 2012-01-31 22:52:06

+0

約定陣列應該是最好的... – mKorbel 2012-01-31 23:17:18

3

當你不顯示形式的創建(什麼是JForm,順便說一句?)我最好的猜測是,該複選框沒有this但有些面板或其他容器本身就是this孩子的孩子。如果你想跟隨你迭代所有組件的方法,你需要遞歸執行,即if (jb instancof Container) <iterate over children>

但是這種方法不太好。您需要記住複選框,以便您可以輕鬆查詢其狀態,或者您應該使用模型,如果是JCheckBox,那麼將會是ButtonModel,這可能會改變適合您的相關數據的擬合數據結構的狀態。

+0

編輯後請檢查我的帖子我添加了XML。謝謝! – gumenimeda 2012-02-01 02:57:36

+0

此XML源自哪裏?一些GUI生成器?在什麼情況下(方法,類)你執行代碼片段嗎? – 2012-02-01 12:24:32