Java JFrame显示不正确

时间:2014-02-24 03:04:43

标签: java swing jframe transparent

当我运行我的程序时,JFrame会显示JFrame中的内容,然后显示JFrame打开时的内容。

frame behaving badly

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();
    }

2 个答案:

答案 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方法

请查看Performing Custom PaintingPainting in AWT and Swing了解详情

答案 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);

}
}

它完美无缺。也许尝试将事物的顺序改为我所拥有的