Java - 在 JPanel 中设置不透明度

Posted

技术标签:

【中文标题】Java - 在 JPanel 中设置不透明度【英文标题】:Java - set opacity in JPanel 【发布时间】:2011-04-03 11:55:55 【问题描述】:

假设我想让 JPanel %20 的不透明度可见?我不是说 setOpaque(绘制或不绘制)或 setVisible(显示或隐藏)...我的意思是让它透明 JPanel.. 你知道吗?

这可能吗?

【问题讨论】:

他当前的问题措辞更好,但他过去曾问过一个非常相似的问题,他甚至接受了一个答案(供参考):***.com/questions/3517722/… 是的,这对我不起作用。 :( 如果您解释什么不起作用,我会提供帮助。 另见How to Create Translucent and Shaped Windows 【参考方案1】:
panel.setBackground( new Color(r, g, b, a) );

您还应该查看Backgrounds With Transparency 以了解您在使用它时可能遇到的任何绘画问题。

【讨论】:

“a”是不透明度的alpha设置。 对了,你也可以阅读Color类的API来获取方法参数的完整描述。 谢谢。我想说对不起。我应该更清楚。 好的,但是如何使用包含背景图像的 JPanel 来做到这一点(看穿图像)? @janetsmith 回答 AWTUtilities 不适用于 JPanels...【参考方案2】:

使用 alpha 属性作为颜色。

例如:

panel.setBackground(new Color(0,0,0,64));

将创建一个黑色,具有 64 的 alpha(透明度)

导致:

这是代码

package test;

import javax.swing.*;
import java.awt.Color;
import java.awt.BorderLayout;

public class See 
    public static void main( String [] args )
        JFrame frame = new JFrame();
        frame.setBackground( Color.orange );


        frame.add( new JPanel()
                        add( new JLabel("Center"));
                        setBackground(new Color(0,0,0,64));
                     , BorderLayout.CENTER );
        frame.add( new JLabel("North"), BorderLayout.NORTH);
        frame.add( new JLabel("South"), BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible( true );
    

没有它看起来像这样:

setBackground( new Color( 0,0,0 )  ); // or setBackground( Color.black );

【讨论】:

图片也可以吗?【参考方案3】:
AWTUtilities.setWindowOpacity(aWindow, aFloat);

其中 aWindow 是 Swing 组件,aFloat 是不透明度。

【讨论】:

对不起,我不关注。我不想要窗口不透明度,而是 JPanel 不透明度。 :D 我使用 JFrame,它运行良好。 AWTUtilities.setWindowOpacity(frame, (float) 0.7); 好的,但是如何使用包含背景图像的 JPanel 来做到这一点(看穿图像)?【参考方案4】:

它在 Windows 7 上效果不佳。

panel.setBackground( new Color(r, g, b, a) );

Alpha 通道只是使颜色变亮。

当一个元素在一个带有 alpha 通道的颜色上更新时,计算机会感到困惑并重置没有 alpha 的更新元素的背景。我去试试

AWTUtilities.setWindowOpacity(aWindow, aFloat);

下一个。

【讨论】:

【参考方案5】:

如果你有一个自定义面板并希望整个面板是半透明的,我建议你像这样覆盖它的方法paintComponent:

@Override
    protected void paintComponent(Graphics graphics) 
        super.paintComponent(graphics);
        Graphics2D g2d = (Graphics2D) graphics;
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    

【讨论】:

【参考方案6】:

如何覆盖 JPanel 的 paintComponent 方法(为了做到这一点,您必须对 JPanel 本身进行子类化并实现自己的paintComponent 方法)在paintComponent 中您可以检索组件的缓冲图像,从那里您可以操作缓冲图像的 alpha 并将其绘制回 JPanel。我很久以前就红了。仍在寻找代码。

【讨论】:

以上是关于Java - 在 JPanel 中设置不透明度的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中设置谷歌地图多边形的不透明度颜色

java 怎么让JLabel和JPanel透明?

jQuery 动画不透明度在 Safari 中不起作用

透明JPanel

如何设置JPanel的透明背景?

JPanel 使用透明 JFrame 不能很好地重新绘制