下面是我用来使内容窗格透明的代码。我不明白的是如果我注释掉该行“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();}});
}
}
Thanx Donal为您的答复。但我不能通过将透明渐变颜色添加到JPanel然后将其设置为JFrame的内容窗格来完成。 – 2012-08-07 10:41:49
我想问题是,如果你只向JPanel添加透明度,那么你会看穿JPanel,只能看到底层框架!通过使框架完全透明,当你透过面板看到的时候,你还会看到框架 – olagjo 2012-08-07 10:47:06
:我认为你说得对。任何人都可以确认它,或者添加一个具体的答案。 – 2012-08-07 10:50:40