获取组件对象的组件?
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()
开始。
【讨论】:
是的,添加了Container
arg【参考方案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)
以上是关于获取组件对象的组件?的主要内容,如果未能解决你的问题,请参考以下文章