Java – 在JPanel中设置不透明度

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

这可能吗?

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

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

使用颜色的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 ); 

替代文字

 AWTUtilities.setWindowOpacity(aWindow, aFloat); 

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

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

它在Windows 7上运行得不好。

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

alpha通道只是减轻了颜色。

当使用Alpha通道在颜色上更新元素时​​,计算机会混淆并重置更新元素的背景而不使用alpha。 我要试试

 AWTUtilities.setWindowOpacity(aWindow, aFloat); 

下一个。

如果你有一个自定义面板,并希望整个事物是半透明的,我建议你覆盖它的方法paintComponent,如下所示:

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