2012-08-07 23 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