Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame-在透明背景上绘制图形?_Java_Swing_Jframe_Transparency - Fatal编程技术网

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

Java JFrame-在透明背景上绘制图形?,java,swing,jframe,transparency,Java,Swing,Jframe,Transparency,我试图制作一个未装饰的透明JFrame,然后在其上绘制一些图形。如果我扩展JFrame,将“未装饰”设置为true,并使用覆盖绘制,我可以创建一个透明的JFrame。像这样: public class MainFrame extends JFrame { public static void main(String[] args) throws Exception { EventQueue.invokeLater(new Runnable() { public void

我试图制作一个未装饰的透明JFrame,然后在其上绘制一些图形。如果我扩展JFrame,将“未装饰”设置为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。很清楚,但那只是一个黑色的背景。我能做什么

如果我扩展JFrame,将“未装饰”设置为true,并使用覆盖绘制,我可以创建一个透明的JFrame


我不这么认为。你只是画画而不关心背景,背景很快就会消失。如果您想知道如何在java中创建透明窗口,请使用Stackoverflow:搜索
[java]透明窗口
。这应该有助于创建这样一个窗口,但这是一个相当复杂的任务:

setBounds((d.width-640)/2,(d.height-480)/2,640,480)你能让它在200x100时断开吗?那样做<代码>设置内容窗格(内容窗格);//实际上没有必要,因为我正在覆盖绘制
1)绘制中没有绘制任何内容。因此,代码更像是“取消绘制”而不是覆盖它2)“不必要”在这里变成了“适得其反”。不透明面板将几乎完全覆盖自定义渲染。为了更快地获得更好的帮助,请发布一篇文章。我稍微编辑了我的Q,您可以编译并运行示例。除非你真的运行它,否则你可能得不到正在发生的事情。(并在它创建的框架后面移动窗口,等等)我最终通过“欺骗”实现了一个透明窗口——我使用java.awt.Robot创建了一个屏幕截图,然后在框架上绘制了它。