【问题标题】:Get components of a components object?获取组件对象的组件?
【发布时间】:2013-01-25 16:23:05
【问题描述】:

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

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

【问题讨论】:

  • components[i].getClass ().getName ().indexOf ("JPanel") != -1 ?
  • 好像他也想遍历那个组件

标签: java user-interface components


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    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() 开始。

    【讨论】:

    • 是的,添加了Containerarg
    【解决方案3】:
    Component[] components = getContentPane().getComponents();
     for (int i = 0; i < components.length; ++i) {
        components[i].setEnabled(enable);
      }
    Arrays.asList(components).get(1);
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • enableComponent(getContentPane(), enable)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多