我已经写了一个方法,可以用来获取所有组件,即使它们被放置在嵌套面板中。例如,该方法可以让您
JButton
面板中的对象。但如果你想禁用所有组件,你应该搜索
JComponent.class
.
/**
* Searches for all children of the given component which are instances of the given class.
*
* @param aRoot start object for search.
* @param aClass class to search.
* @param <E> class of component.
* @return list of all children of the given component which are instances of the given class. Never null.
*/
public static <E> List<E> getAllChildrenOfClass(Container aRoot, Class<E> aClass) {
final List<E> result = new ArrayList<>();
final Component[] children = aRoot.getComponents();
for (final Component c : children) {
if (aClass.isInstance(c)) {
result.add(aClass.cast(c));
}
if (c instanceof Container) {
result.addAll(getAllChildrenOfClass((Container) c, aClass));
}
}
return result;
}
因此,在您的情况下,您必须重新编写循环,如下所示:
for (Component myComps : getAllChildrenOfClass(compPanel, JComponent.class)){
myComps.setEnabled(false);
}