0

下面是我用来使内容窗格透明的代码。我不明白的是,如果我注释掉“setBackground(new Color(0,0,0,0));“我的窗口只是用渐变颜色和不透明的颜色绘制。但是使用上面的代码行使其透明。

谁能说出这个“setBackground(new Color(0,0,0,0)); ”和我为 JPanel 设置的渐变颜色之间的关系是什么。提前谢谢。

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsDevice.WindowTranslucency;
import java.awt.GraphicsEnvironment;
import java.awt.Paint;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class transparent extends JFrame {

public transparent() {
    super("Transparent Window");

    setBackground(new Color(0,0,0,0));//problem with this line

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,200);
    getContentPane().setLayout(new FlowLayout());

    JPanel jp=new JPanel(){
        public void paintComponent(Graphics g)
        {
            //super.paintComponent(g);
            Graphics2D g2=(Graphics2D)g;
            Paint gp=new GradientPaint(300, 700, new Color(20,20,210,0), 100, 00, new Color(10,20,40,255));
            g2.setPaint(gp);
            g2.fillRect(0, 0, getWidth(),getHeight());
        }
    };

    setContentPane(jp);
    JButton jbtn=new JButton("Enter");
    add(jbtn);
    setVisible(true);

}
public static void main(String[] args) {
    // TODO Auto-generated method stub

    JFrame.setDefaultLookAndFeelDecorated(true);

    SwingUtilities.invokeLater(new Runnable(){public void run(){new transparent();}});
}

}
4

1 回答 1

2

颜色 (0,0,0,0) 是完全透明的,任何具有 alpha 分量(颜色构造器中的第四个参数)设置为零的颜色也是如此。

http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(int, int, int, int)

public Color(int r, int g, int b, int a)    

创建具有 (0 - 255) 范围内的指定红色、绿色、蓝色和 alpha 值的 sRGB 颜色。 参数:
r - 红色分量
g - 绿色分量
b - 蓝色分量
a - alpha 分量

http://en.wikipedia.org/wiki/Alpha_compositing

在计算机图形学中,Alpha 合成是将图像与背景相结合以创建部分或完全透明外观的过程。

当您将其设置为背景时,框架将变得透明!这是至关重要的,因为如果您的框架不透明,则在顶部有一个透明面板只会让您透过该面板看到底层框架。使框架透明,让你看透背后的一切。

于 2012-08-07T10:36:27.573 回答