2016-03-23 13 views
1

すべてのチェックボックスの値をsetSelected(false)に設定しようとしています。これらのチェックボックスは、他のサブパネルを持つ異なるサブパネルからのものです。 getComponents(panelName)はそれに含まれるコンポーネントのみを取得しますが、子パネルのすべてのサブパネル/子パネルは取得しません。上記でgetComponent()を使用して子コンポーネントのチェックボックスsetSelected()を設定する方法

enter image description here

allPermissionsJPanelは親パネルです。 settingsButtonPanelcardContainerPanelを第1レベルのサブパネルとして使用し、すべての単一のJCheckBoxをfalseに設定します。

どうすればよいですか?私はgetComponents()を使用しようとしましたが、サブパネルのサブパネルからすべてのチェックボックスを戻していません。

これは私のコードです。

List<Component> allPermissionsCheckboxes =fm.getComponentsAsList(allPermissionsJPanel); 


     for(Component c: allPermissionsCheckboxes){ 
      if(c instanceof JCheckBox){ 
       ((JCheckBox) c).setSelected(false); 
      } 
     } 

私はgetComponents()に関連する他の方法をチェックしてみましたが、私はそれはJCheckBoxinstanceofだ場合、私がチェックできるようにサブパネルのすべてのサブパネルを通過する方法を見つけることができませんでした。助言がありますか?

+0

@CubeJockey、感謝です。あなたは承認されました。奇妙な。 – BPS

+0

@BPS、はい、2Kの上限に達すると、編集内容は提案キューに入らず、自動的に承認されます。 – CubeJockey

答えて

0

これは、チェックボックスを探してsetSelected(false)を実行するコンポーネント階層を反復する再帰的メソッドとして実装したいと思うでしょう。

方法は、このような何かを見ることができる:

public void deselectAllCheckBoxes(Component panel) { 
    List<Component> allComponents = fm.getComponentsAsList(panel); 

    for (Component c : allComponents) { // Loop through all the components in this panel 
     if (c instanceof JCheckBox) { // if a component is a check box, uncheck it. 
      ((JCheckBox) c).setSelected(false); 
     } else if (c instanceof JPanel) { // if a component is a panel, call this method 
      deselectAllCheckBoxes(c);  // recursively. 
    } 
} 

を次にあなたがしなければならないすべては、コールdeselectAllCheckBoxes(allPermissionsPanel);

+0

あなたのアドバイスごとに再帰が問題を解決しました。ありがとう。それは役に立ちました。 – p3ace

関連する問題