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 中设置不透明度的主要内容,如果未能解决你的问题,请参考以下文章