Java - 在 JPanel 中设置不透明度
假设我想使 JPanel %20 的不透明度可见?我不是说setOpaque(绘制或不绘制)或setVisible(显示或隐藏)...我的意思是让它透明化JPanel。你知道的?
这可能吗?
假设我想使 JPanel %20 的不透明度可见?我不是说setOpaque(绘制或不绘制)或setVisible(显示或隐藏)...我的意思是让它透明化JPanel。你知道的?
这可能吗?
您需要为 Color 对象设置“alpha”值:
panel.setBackground( new Color(r, g, b, a) );
但是,这仍然无法正常工作,因为Swing无法正确绘制透明背景,因此您需要进行自定义绘制。基本逻辑是:
JPanel panel = new JPanel()
{
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
panel.setOpaque(false); // background of parent will be painted first
panel.setBackground( new Color(255, 0, 0, 20) );
frame.add(panel);
查看“透明背景”,了解有关实际绘画问题以及上述代码解决问题的原因的更多信息。该链接还包含一个自定义可重用类,用于为您执行上述绘制。
使用 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 );