2016-03-23 4 views
1

'u kullanarak alt bileşenlerin setSetected() onay kutusu nasıl ayarlanır Tüm onay kutularının değerini setSelected(false) olarak ayarlamaya çalışıyorum. Bu onay kutuları diğer alt panellere sahip farklı alt panellerden gelir. getComponents(panelName) sadece üzerinde bulunan bileşenleri alır, ancak alt panelin her alt panelini/alt panelini değil ... vb. Yukarıda getComponent()

enter image description here

, allPermissionsJPanel üst paneldir. İlk düzey alt panel olarak settingsButtonPanel ve cardContainerPanel ve her bir JCheckBox öğesinin false olarak ayarlanmasını istiyorum.

Bunu nasıl yaparım? getComponents() kullanmayı denedim, ancak alt panellerin alt panelinden tüm onay kutularını iade etmiyor.

Bu benim kodum.

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


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

Ben getComponents() ilgili diğer yöntemler denetimi çalıştı ama bir instanceof bir JCheckBox ise bu yüzden kontrol edebilirsiniz alt-panel her alt-panel geçer bir yöntem bulamadık. Baska öneri?

+0

@CubeJockey aramak. Seninkiler onaylandı, tho. Garip. – BPS

+0

@BPS, Evet, 2k rep sınırına ulaştığınızda, düzenlemeleriniz öneri kuyruğuna girmez ve otomatik olarak onaylanır. – CubeJockey

cevap

0

Bunu, onay kutularını aramak ve setSelected(false) gerçekleştirerek bileşen hiyerarşisinde yineleyen özyinelemeli bir yöntem olarak uygulamak istersiniz.

yöntem şöyle görünebilir:

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

Sonra yapmanız gereken tek şey sayesinde deselectAllCheckBoxes(allPermissionsPanel);

+0

Tavsiyenize göre özyineleme sorunu çözdü. Teşekkürler. Yardımcı oldu. – p3ace