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)
欢迎来到"亲爱的,我打破了油漆链"的精彩世界......
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中执行自定义绘画和绘画