1

我只是为了我的兴趣而尝试写以下内容:

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

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

在“Component[]”数组中,例如还可以包含一个包含更多 GUI 元素的 JPanel。但是我怎么能访问它们呢?没有像“components[i].getCOMponents()”这样的方法吗?

4

4 回答 4

2

awt 设计器将 Container 类作为一种特殊的组件,我也不知道为什么,但是您可以利用此功能。

要查找所有子组件,您可以检查该组件是否为容器。如果不是,则它不能有子组件。如果是,则转换为 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
   }
}
于 2013-02-10T11:49:42.220 回答
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()开始。

于 2013-02-10T11:45:25.300 回答
0

组件包含在Container. Panelextends Container,因此您可以获得它的组件。因此,要获取子组件,您必须将组件转换为 Container(如果它是 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
        }
    }
}
于 2013-02-10T11:49:20.947 回答
0
Component[] components = getContentPane().getComponents();
 for (int i = 0; i < components.length; ++i) {
    components[i].setEnabled(enable);
  }
Arrays.asList(components).get(1);
于 2013-02-10T11:49:52.650 回答