2016-03-23 6 views
1

Ich versuche, alle Checkboxen Wert auf setSelected(false) setzen. Diese Kontrollkästchen stammen aus verschiedenen Unterbereichen mit anderen Unterbereichen. getComponents(panelName) ruft nur die darin enthaltenen Komponenten ab, aber nicht jedes Unterfenster/untergeordnete Bedienfeld des untergeordneten Bedienfelds ... und so weiter.Wie setze ich das Kontrollkästchen setSelected() der untergeordneten Komponenten mit getComponent()

enter image description here

Im Obigen allPermissionsJPanel ist die Mutterplatte. settingsButtonPanel und cardContainerPanel als erste Ebene Subpanel und ich möchte jede einzelne JCheckBox auf false gesetzt werden.

Wie mache ich das? Ich habe versucht, getComponents() zu verwenden, aber es gibt nicht alle Checkboxen aus dem Subpanel der Subpanels zurück.

Dies ist mein Code.

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


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

Ich habe versucht, andere Methoden zu getComponents() Zusammenhang Kontrolle, aber ich eine Methode, die durch jede subpanel von subpanel geht, so kann ich überprüfen, ob es ein instanceof ist nicht ein JCheckBox finden. Irgendwelche Vorschläge?

+0

@CubeJockey, danke. Dein wurde genehmigt, tho. Seltsam. – BPS

+0

@BPS, Ja, sobald Sie das 2k-Wiederholungslimit erreicht haben, werden Ihre Änderungen nicht in die Vorschlagswarteschlange übernommen und automatisch genehmigt. – CubeJockey

Antwort

0

Sie möchten dies als rekursive Methode implementieren, die die Komponentenhierarchie durchsucht, nach Kontrollkästchen sucht und setSelected(false) ausführt.

Das Verfahren könnte wie folgt aussehen:

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. 
    } 
} 

Dann alles, was Sie tun müssen, ist anrufen deselectAllCheckBoxes(allPermissionsPanel);

+0

Rekursion nach Ihrem Rat behoben mein Problem. Vielen Dank. Es war hilfreich. – p3ace

Verwandte Themen