2012-08-07 15 views
0

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

任何人都可以告诉这个“setBackground(new Color(0,0,0,0));”和我为JPanel设置的渐变颜色之间的关系是什么。 Thanx提前。

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();}}); 
} 

} 

回答

2

颜色(0,0,0,0)是完全透明的,这与以阿尔法分量(在彩色构造器第四个参数)设置为零的任何颜色。

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 - 红色分量
克 - 绿色成分
b - 蓝色分量
一个 - 阿尔法分量

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

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

当您将此设置为您的背景时,该框架将变为透明!这是至关重要的,因为如果你的框架不透明,在顶部有一个透明的面板只会让你看穿这个面板和底层框架。使框架透明,让你看透背后的任何谎言。

+0

Thanx Donal为您的答复。但我不能通过将透明渐变颜色添加到JPanel然后将其设置为JFrame的内容窗格来完成。 – 2012-08-07 10:41:49

+0

我想问题是,如果你只向JPanel添加透明度,那么你会看穿JPanel,只能看到底层框架!通过使框架完全透明,当你透过面板看到的时候,你还会看到框架 – olagjo 2012-08-07 10:47:06

+0

:我认为你说得对。任何人都可以确认它,或者添加一个具体的答案。 – 2012-08-07 10:50:40