获取组件对象的组件



我只是想写以下内容:

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()"这样的方法了?

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

组件包含在Container中。Panel扩展了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
        }
    }
}
Component[] components = getContentPane().getComponents();
 for (int i = 0; i < components.length; ++i) {
    components[i].setEnabled(enable);
  }
Arrays.asList(components).get(1);

你可以做:

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);
        }
    }
}

并通过CCD_ 4开始。

相关内容

  • 没有找到相关文章

最新更新