私はレンガのゲームを作っています。フレーム画面上のすべてのものを再描画できるように、0.1秒ごとに画面がクリアになるようにします。
イベントを発生させずにフレーム画面を直接クリアする方法はありますか?
オーバーライドする必要があります
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);
}
}
Xミリ秒ごとに何かを発生させたい場合は、ActionListenerを受け取るjavax.swing.Timerを使用できます。実際のクリアアクションに関しては、最初に頭に浮かぶのはGraphics.clearRect()ですが、もっと良い方法があるのではないかと思います。
Peterが提案したことを実行しますが、paintの代わりにpaintComponentをオーバーライドします。
また、これはかなりひどくちらつく(画面全体を絶えず再描画する)ことに気付くと思います。あなたはそれを行うためのより良い方法を見つけたいと思うかもしれません...残念ながら、それは私があまりよく知っている分野ではありません。 これが役立つかもしれない簡単なバウンドボールのデモです。