我只是想写以下内容:
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()"这样的方法了?
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
}
}
组件包含在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
}
}
}
Component[] components = getContentPane().getComponents();
for (int i = 0; i < components.length; ++i) {
components[i].setEnabled(enable);
}
Arrays.asList(components).get(1);
你可以做:
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);
}
}
}
并通过CCD_ 4开始。