在以下代码中,我无法理解setBackground()
方法设置哪个图层的背景。其次,当我包含这一行时为什么在窗口中出现一个洞,意味着当我在窗口之间点击时,它最小化,因为我点击了其他地方。
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
java.awt.GraphicsDevice;
import java.awt.GraphicsDevice.WindowTranslucency;
import java.awt.GraphicsEnvironment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class transparentWindow extends JFrame {
public transparentWindow() {
// TODO Auto-generated constructor stub
//JFrame jfrm=new JFrame("Transparent Window");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,200);
getContentPane().setLayout(new FlowLayout());
//setBackground(new Color(0,0,0,0));
add(new JButton("Enter"));
setOpacity(0.7f);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd=ge.getDefaultScreenDevice();
if(!gd.isWindowTranslucencySupported(WindowTranslucency.TRANSLUCENT))
{
System.out.println("Transparency not supported");
System.exit(0);
}
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable(){public void run(){new transparentWindow();}});
}
}
答案 0 :(得分:2)
所有未在特定对象上调用的方法实际上都在this
上调用,所以
setBackground(new Color(0,0,0,0));
就像
this.setBackground(new Color(0,0,0,0));
这意味着它会在JFrame
上调用。
答案 1 :(得分:2)
你会发现另一个问题是,设置框架opacity
会同样影响所有孩子
如果你想看一个很好的长篇讨论(& example),请参阅how to set JFrame background transparent but JPanel or JLabel Background opaque?