首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Swing -半透明组件

问Java Swing -半透明组件
EN

Stack Overflow用户
提问于 2011-02-13 15:13:20
回答 1查看 3.3K关注 0票数 2

我最近问了一个关于半透明组件的问题,这个问题导致了看起来没有正确更新的奇怪的工件。我收到的答案导致工件消失,但代价是半透明。

解决方案是-对于每个半透明组件-也调用setOpaque(false)函数。这样,Swing就知道它需要重新绘制这些组件背后的背景。

然而,这是以我试图实现的半透明性为代价的。相反,它导致组件变得透明。

前提是:我正在为一个聊天客户端设计GUI,并且一个功能请求需要有一个背景。通过遵循扩展JPanel类的代码片段,我成功地使后台工作,但随后我希望组件允许显示背景。设置其半透明度后,更新组件的残留物将显示在不应该显示的位置。我来这里解决了我的问题,但现在我有了新的问题。所以我们到了这里。

所以,这是我的猜测:

为每个所需的组件设置setOpaque( -Calling )函数,而不设置半透明颜色并不能达到我想要的效果。

-Setting是半透明的颜色,不调用setOpaque(false)允许显示半透明的背景,但会产生伪影,让我回到原点。

因此,我需要一些中间地带,透明的没有人工制品,和半透明的人工制品。也就是说,我想要一个没有瑕疵的半透明背景(不是完全透明的)。

似乎我需要重写JFrame以使其重绘其所有组件,而不考虑不透明度。除非我错过了什么..。这就是我来这里的原因!

谢谢!

(这里有一个指向原始问题的链接,并附图片供参考:Java Swing - Translucent Components causing Artifacts)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-13 18:47:56

一种选择是覆盖组件并自己绘制背景:

代码语言:javascript
复制
class TranslucentLabel extends JLabel {
    public TranslucentLabel(String text) {
        super(text);
        setOpaque(false);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(new Color(255, 0, 0, 64));
        Insets insets = getInsets();
        g.fillRect(insets.left, insets.top, 
                getWidth() - insets.left - insets.right, 
                getHeight() - insets.top - insets.bottom);
        super.paintComponent(g);
    }
}

编辑:或者,您可以直接在面板上绘制子组件的半透明背景颜色,这样您就不必覆盖组件:

代码语言:javascript
复制
class YourPanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g.create();

        // Draw your background image here to g2d.

        g2d.setColor(new Color(255, 0, 0, 64));
        Area area = new Area();
        for (Component component : getComponents()) {
            area.add(new Area(component.getBounds()));
        }
        g2d.fill(area);
        g2d.dispose();
    }
}

这种方法有一个缺点。如果一个组件有一个真正透明的部分(比如圆角边框),那么它的整个背景将被着色。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4982960

复制
相关文章

相似问题

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