2013-02-10 66 views
1

我試着寫只是我的興趣如下:獲取組件對象的組件?

public void enableComponents(boolean enable) { 
    Component[] components = getContentPane().getComponents(); 

    for (int i = 0; i < components.length; ++i) { 
     components[i].setEnabled(enable); 
    } 
// [...] 

在「組件[]」數組可以如也是一個包含更多GUI元素的JPanel。但我怎麼能訪問它們?沒有像「components [i] .getCOmponents()」這樣的方法嗎?

+0

'成分〔Ⅰ〕.getClass().getName().indexOf( 「JPanel的」)!= -1'? – 2013-02-10 11:45:42

+0

似乎他想遍歷該組件也 – ogzd 2013-02-10 11:46:51

回答

1

AWT的設計使容器類作爲一種特殊的成分,這我不爲什麼無論是,但您可以利用此功能。

要查找所有子組件,可以檢查組件是否爲容器。如果不是,那麼它就不能有子組件。如果是,則投射到Container並訪問它們。如果您還需要子子組件,也可以調用。

Component[] components = getContentPane().getComponents(); 

for (int i = 0; i < components.length; ++i) { 
    if ((components[i] instanceof Container)) { 
     Container subContainer = (Container)components[i]; 
     //do something here 
    }else{ 
     //do something here 
    } 
} 
0

你可以這樣做:

public void enableComponents(Container container, boolean enable) { 

    Component[] components = container.getComponents(); 

    for (int i = 0; i < components.length; ++i) { 
     components[i].setEnabled(enable); 
     if (components[i] instanceof Container) { 
      Container subContainer = (Container)components[i]; 
      enableComponents(subContainer, enable); 
     } 
    } 
} 

,並通過在getContentPane()開始。

+0

導致無限循環 – ogzd 2013-02-10 11:47:43

+0

是的,添加'容器'arg – Reimeus 2013-02-10 11:50:31

0

組件包含在Container中。 Panel擴展爲Container,因此您可以獲取其組件。因此,要獲得子組件,你要投組件容器(如果是集裝箱的實例):

public void enableComponents(boolean enable) { 
    enableComponent(getContentPane()); 
} 


public void enableComponent(Component component, boolean enable) { 
    component.setEnabled(enable) 

    if (component instanceof Container) { 
     Container container = (Container)component; 
     for (Component c : container.getComponents()) { 
      enableComponent(c, enable); // recursive call 
     } 
    } 
} 
+0

'enableComponent(getContentPane(),啓用)' – ogzd 2013-02-10 11:53:41

0
Component[] components = getContentPane().getComponents(); 
for (int i = 0; i < components.length; ++i) { 
    components[i].setEnabled(enable); 
    } 
Arrays.asList(components).get(1);