我试图制作一个运行动画的应用程序。要做到这一点,我有一个Jframe,它包含我的动画运行的Jpanel的子类。这里是我的两个类:paintComponent()和actionPerformed()对JPanel iplements不同步ActionListener
首先,这里是我的驱动程序类:
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是调用,每次调用paintComponent时调用变量j。发生的事情是,我开始比j大得多,并且paintComponent绘制的线条似乎以更快更快的速度增长。
这里是我的问题:
- 为什么会出现这种情况?
- 我该如何同步事物,以便每1000毫秒重新绘制一行?
- 鉴于我想要做的是,我的方法是否错误?我应该以不同的方式做事吗?
在此先感谢。
哦哇。我甚至没有注意到我已经做到了。哇。 – David
在构造函数中启动计时器似乎效果更好。这听起来像是正确的做法吗? – David
@大卫:是的,绝对! –