获取组件对象的组件?

时间:2013-02-10 11:42:27

标签: java user-interface components

我试图写下以下内容仅仅是为了我的兴趣:

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 个答案:

答案 0 :(得分:2)

awt设计器将Container类作为一种特殊的Component,我也不知道为什么,但你可以利用这个功能。

要查找所有子代理,您可以检查该组件是否为容器。如果不是,则它不能有子组件。如果是,则转换为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
   }
}

答案 1 :(得分: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()开始。

答案 2 :(得分:0)

组件由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
        }
    }
}

答案 3 :(得分:0)

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