我正在尝试制作一个运行动画的应用程序。为此,我有一个 Jframe,其中包含我的 Jpanel 子类,动画在其中运行。这是我的两门课:
首先,这是我的驱动程序类:
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 毫秒重绘一次?
- 鉴于我正在尝试做的事情,我的方法是错误的吗?我应该以不同的方式做事吗?
提前致谢。