我的JPanel
上有几个JComponent
,我想在按下Start按钮时禁用所有这些组件。
目前,我正在通过以下方式显式禁用所有组件
component1.setEnabled(false);
:
:
但是有没有什么办法可以让我一次禁用所有组件呢?我尝试禁用向其中添加这些组件的JPanel
panel.setEnabled(false);
但它并没有起作用。
发布于 2010-04-26 20:38:17
面板应该有一个getComponents()
方法,它可以在循环中使用来禁用子组件,而不需要显式地命名它们。
发布于 2010-04-26 23:40:56
Disabled Panel提供了两种方法的支持。一个用来递归禁用组件,另一个用来用禁用的外观“绘制”面板。
发布于 2013-05-28 08:31:18
下面的方法使用递归来实现此目的。传入任何Container
,此方法将返回位于Container
“内部”任何位置的所有非容器组件的Component
数组。
private Component[] getComponents(Component container) {
ArrayList<Component> list = null;
try {
list = new ArrayList<Component>(Arrays.asList(
((Container) container).getComponents()));
for (int index = 0; index < list.size(); index++) {
for (Component currentComponent : getComponents(list.get(index))) {
list.add(currentComponent);
}
}
} catch (ClassCastException e) {
list = new ArrayList<Component>();
}
return list.toArray(new Component[list.size()]);
}
}
只需遍历返回数组的元素并禁用组件。
for(Component component : getComponents(container)) {
component.setEnabled(false);
}
https://stackoverflow.com/questions/2713425
复制相似问题