我正在尝试制作一个未装饰的透明 JFrame,然后在其上绘制一些图形。如果我扩展 JFrame,将 undecorated 设置为 true,并使用覆盖绘制,我可以制作一个透明的 JFrame。像这样:
public class MainFrame extends JFrame {
public static void main(String[] args) throws Exception {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MainFrame() {
setTitle("ASDF");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setUndecorated(true);
setBounds(0, 0, 200, 200);
}
public void paint(Graphics g){
g.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 20));
g.drawString("ASDF", 100, 100);
}
}
问题是,当我尝试在其上绘制某些东西时,我无法清除为另一次重绘绘制的内容。就像在这个例子中一样,文本保留了绘制时的背景。所以如果我在框架后面移动一个窗口,它看起来很奇怪,因为框架本身有旧的背景。我尝试了 AlphaComposite.Clear,但这只会产生黑色背景。我能做些什么?