1

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>
4

3 に答える 3

4

これは何ですか"?Jフレーム?もしそうなら、その検索で得られる唯一の JFrame の直接のコンポーネントは contentPane であり、JCheckBoxes はコンポーネント階層の中で探している場所よりも深いところにある可能性が高いことを理解しています。

JCheckBoxes を ArrayList などのコレクションに入れてみませんか。または、数が少ない場合は、それらの変数名を使用します。

于 2012-01-31T22:18:31.437 に答える
3

フォームの作成を示していないので(ところで、何ですか?)、チェックボックスは の子ではなく、それ自体が の子であるパネルまたは他のコンテナであるJFormと推測されます。すべてのコンポーネントを反復処理するアプローチに従いたい場合は、再帰的に行う必要があります。thisthisif (jb instancof Container) <iterate over children>

しかし、このアプローチはあまりうまくいきません。チェックボックスを覚えて状態を簡単に照会できるようにするか、関連データを保持する適切なデータ構造の状態を変更する可能性JCheckBoxがある場合は、モデルを使用する必要があります。ButtonModel

于 2012-01-31T22:21:17.217 に答える
3

チェックボックスが JPanel などの別のコンテナー内にある可能性があります。その場合、コンテナー コンポーネントで getcomponents を呼び出す必要があります。それ以外の場合は、jframe 内で別のコンテナー コンポーネントを見つけたときに再帰的に呼び出すメソッドを作成できるため、すべての階層をトラバースできます。 .

于 2012-01-31T22:29:39.893 に答える