アニメーションを実行するアプリケーションを作成しようとしています。これを行うために、アニメーションが実行される Jpanel のサブクラスを含む Jframe を用意しました。ここに私の2つのクラスがあります:
まず、ここに私のドライバークラスがあります:
import javax.swing.*;
public class Life {
public static void main(String[] args){
JFrame game = new JFrame("Life");
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setSize(500, 500);
MainPanel mainPanel = new MainPanel();
game.setContentPane(mainPanel);
game.setVisible(true);
}
}
次に、Jpanel のサブクラスを次に示します。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainPanel extends JPanel implements ActionListener{
int i = 0;
int j = 0;
public MainPanel(){
super();
}
public void paintComponent(Graphics g){
j++;
g.drawLine(10,10, 20 + i, 20 + i);
Timer t = new Timer(1000, this);
t.start();
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
i++;
repaint();
}
}
actionPreformed が呼び出されるたびに変数 i がインクリメントされ、paintComponent が呼び出されるたびに変数 j が呼び出されることに注意してください。結局、i が j よりもはるかに大きくなり始め、paintComponent によって描画された線がどんどん速く伸びているように見えます。
ここに私の質問があります:
- なぜこれが起こるのですか?
- 1000ミリ秒ごとに線が再描画されるように同期するにはどうすればよいですか?
- 私がやろうとしていることを考えると、私のアプローチは間違っていますか? 私は違うことをするべきですか?
前もって感謝します。