我试图写下以下内容仅仅是为了我的兴趣:
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()”的方法?
答案 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);