获取组件对象的组件?

Posted

技术标签:

【中文标题】获取组件对象的组件?【英文标题】: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 ? 好像他也想遍历那个组件 【参考方案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)

以上是关于获取组件对象的组件?的主要内容,如果未能解决你的问题,请参考以下文章

组件对象的获取方式

如何在Vue组件中获取当前登录用户的用户对象

PySpark PCA:从模型对象中获取组件数量

解决vue组件props传值对象获取不到的问题

如何在列表中获取游戏对象的组件

vue组件获取和vue-cli的基本了解