Java JFrame显示不正确

0 java swing transparent jframe

当我运行我的程序时,会JFrame显示其中的内容JFrame以及JFrame打开时的内容.

框架表现很差

public class ChuckysAdventure extends JFrame { // Main Class

    public ChuckysAdventure(){
        setTitle("Chuckys Adventure");
        setSize(700, 700);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void paint (Graphics g){
        g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
    }
    public static void main(String[] args){  // Starts game
         new ChuckysAdventure();
    }
Run Code Online (Sandbox Code Playgroud)

Mad*_*mer 8

欢迎来到"亲爱的,我打破了油漆链"的精彩世界......

Swing中的绘画由一系列链式方法调用组成,它们一起工作以产生最终结果,其中一种方法实际上Graphics用组件背景颜色填充上下文

如果不遵守这个油漆链,就不会造成油漆工艺的终结. Graphics是一个共享资源,这意味着在给定的绘制周期内绘制的所有内容都将使用相同的Graphics上下文实例.如果您未能确保油漆链正确完成,您将得到任意数量的令人敬畏的油漆工件.

你最初的解决方法是改变......

public void paint (Graphics g){
    g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
Run Code Online (Sandbox Code Playgroud)

至...

public void paint (Graphics g){
    super.paint(g);
    g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
Run Code Online (Sandbox Code Playgroud)

你接下来的修复就是避免覆盖paint顶层容器,比如JFrame它不是双重缓冲,而是在框架装饰下面进行绘画,这一切都很容易完全搞砸了涂装过程

相反,你应该使用类似的东西JPanel,paintComponent而不是重写它的方法

有关详细信息,请参阅在AWT和Swing执行自定义绘画绘画