如何在java中清除我的框架屏幕?

时间:2009-12-24 06:24:32

标签: java swing jframe

我正在制作砖游戏。我希望每0.1秒后屏幕变得清晰,这样我就可以在框架屏幕上重绘每一个东西。

有没有办法直接清除框架屏幕而没有任何事件发生?

3 个答案:

答案 0 :(得分:3)

你应该覆盖

public void paint(Graphics g)

并在那里完成所有绘图。

然后你启动一个调用

的计时器
repaint();

这是一个基本的例子:

public class MainFrame extends JFrame {

    int x = -1;
    int inc;

    public MainFrame() {
        Timer timer = new Timer(10, new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                MainFrame.this.repaint();
            }
        });
        timer.start();
    }

    public void paint(Graphics g) {
        // don't call super.paint(g), we do all the painting

        if(x > getWidth()) inc = -5;
        if(x < 0) inc = 5;

        x += inc;

        // here we clear everything
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());

        g.setColor(Color.BLUE);
        g.drawLine(x, 0, getWidth()-x, getHeight());
    }

    public static void main(String[] args) {
        MainFrame mainFrame = new MainFrame();
        mainFrame.setSize(800, 600);
        mainFrame.setVisible(true);
    }
}

答案 1 :(得分:1)

做彼得建议但override paintComponent instead of paint

我还怀疑你会发现它会闪烁得非常糟糕(不断重绘整个屏幕)。你可能想找到一个更好的方法来做到这一点......不幸的是,这不是一个我太了解的领域。 Here is a simple bouncing ball demo that might help

答案 2 :(得分:0)

如果你想要每X毫秒发生一次事情,你可以使用一个带有ActionListener的javax.swing.Timer。至于实际的清算行动,首先想到的是Graphics.clearRect(),但我怀疑可能有更好的方法。