首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >禁用具有视觉效果的JPanel

禁用具有视觉效果的JPanel
EN

Stack Overflow用户
提问于 2010-03-18 16:31:45
回答 5查看 4.2K关注 0票数 2

我正在寻找一种禁用JPanel的好方法。我正在为Java使用MVC设计。我希望在模型处理过程中禁用JPanel。我试过setEnabled(false).这将禁用JPanel上的用户输入,但我希望它是灰色的,以增加更多的视觉效果。

提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-18 16:40:58

你看过玻璃玻璃了吗?它们对于已经包含组件的区域的油漆是有用的。瞧一瞧

票数 2
EN

Stack Overflow用户

发布于 2013-02-27 14:33:00

默认情况下,禁用JPanel不会禁用其子组件,只会阻塞面板。我推荐的解决方案是创建一个JPanel子类并覆盖setEnabled方法,如下所示:

代码语言:javascript
运行
复制
class JDisablingPanel extends JPanel {
    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        this.setEnabledRecursive(this, enabled);
    }

    protected void setEnabledRecursive(Component component, boolean enabled) {
        if (component instanceof Container) {
            for (Component child : ((Container) component).getComponents()) {
                child.setEnabled(enabled);

                if (!(child instanceof JDisablingPanel)) {
                    setEnabledRecursive(child, enabled);
                }
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-03-18 16:34:18

JPanel在禁用时没有什么不同,当它被禁用时,您必须重写paintComponent()方法来以不同的方式(或使用不同的颜色)绘制它。像这样的东西可能会起作用:

代码语言:javascript
运行
复制
protected void paintComponent(Graphics g) {
    if (this.isOpaque()) {
        Color color = (this.isEnabled()) ? this.getBackground() : this.getBackground().brighter();
        g.setColor(color);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2471597

复制
相关文章

相似问题

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