首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Swing -如何禁用JPanel?

Java Swing -如何禁用JPanel?
EN

Stack Overflow用户
提问于 2010-04-26 20:34:24
回答 5查看 37.9K关注 0票数 19

我的JPanel上有几个JComponent,我想在按下Start按钮时禁用所有这些组件。

目前,我正在通过以下方式显式禁用所有组件

代码语言:javascript
复制
component1.setEnabled(false);
:
:

但是有没有什么办法可以让我一次禁用所有组件呢?我尝试禁用向其中添加这些组件的JPanel

代码语言:javascript
复制
panel.setEnabled(false);

但它并没有起作用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-26 20:38:17

面板应该有一个getComponents()方法,它可以在循环中使用来禁用子组件,而不需要显式地命名它们。

票数 25
EN

Stack Overflow用户

发布于 2010-04-26 23:40:56

Disabled Panel提供了两种方法的支持。一个用来递归禁用组件,另一个用来用禁用的外观“绘制”面板。

票数 3
EN

Stack Overflow用户

发布于 2013-05-28 08:31:18

下面的方法使用递归来实现此目的。传入任何Container,此方法将返回位于Container“内部”任何位置的所有非容器组件的Component数组。

代码语言:javascript
复制
    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()]);
        }
    }

只需遍历返回数组的元素并禁用组件。

代码语言:javascript
复制
for(Component component : getComponents(container)) {
    component.setEnabled(false);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2713425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档