当我运行我的程序时,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();
}
答案 0 :(得分:8)
欢迎来到“亲爱的,我打破了油漆链”的精彩世界......
Swing中的绘画由一系列链式方法调用组成,它们协同工作以产生最终结果,其中一种方法实际上用组件背景颜色填充Graphics
上下文
如果不遵守此油漆链将导致油漆工件无法结束。 Graphics
是一个共享资源,这意味着在给定绘制周期内绘制的所有内容都将使用Graphics
上下文的相同实例。如果您未能确保油漆链正确完成,您将得到任意数量的令人敬畏的油漆工件。
您最初的修复方法是改变......
public void paint (Graphics g){
g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
为...
public void paint (Graphics g){
super.paint(g);
g.drawString("Hi. I'm Chucky. Wanna play?", 250, 250);
}
你接下来的修复是为了避免覆盖paint
顶层容器,例如JFrame
部分,因为它不是双缓冲的,并且在框架装饰下面会出现绘画,这一切都很容易完全搞砸了油漆过程
相反,您应该使用类似JPanel
的内容并覆盖它的paintComponent
方法
答案 1 :(得分:-2)
我使用过这样的东西:
public class gui {
public static void main(String args[]) {
JFrame tobi = new JFrame("youwillneverfigurethisout");
tobi.setVisible(true);
tobi.setTitle("Xbatz GUI Example");
tobi.setSize(400, 200);
tobi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
它完美无缺。也许尝试将事物的顺序改为我所拥有的