JFrame - 在透明背景上绘制图形?

时间:2012-09-11 21:33:35

标签: java swing jframe transparency

我正在尝试制作一个未修饰的透明JFrame,然后在其上绘制一些图形。如果我扩展JFrame,将undecorated设置为true,并覆盖paint,我可以创建一个透明的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,但那只做了一个黑色的背景。我该怎么办?

1 个答案:

答案 0 :(得分:0)

  

如果我扩展JFrame,将undecorated设置为true,并覆盖paint,我可以创建一个透明的JFrame。

我不这么认为。你只是在不关心背景的情况下进行绘画,这很快就会丢失。如果您想知道如何在java中创建透明窗口,请使用Stackoverflow:搜索[java] transparent window。这应该可以帮助您创建这样一个窗口,但这是一项非常复杂的任务:Transparent Window