我目前正在 JPanel
中使用计时器制作一些基本图形,但我无法弄清楚为什么计时器呈指数增长。
这是我的代码:
public class panel extends JPanel implements ActionListener {
int r = 20;
Timer forgo;
public panel(){
setSize(400,400);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawOval(r, 20, 20, 20);
forgo = new Timer(1000,this);
forgo.start();
}
public void actionPerformed(ActionEvent e) {
r+=5;
repaint();
System.out.println(r);
}
}
如您所见,我尝试将椭圆形移动到面板的右边缘,但我的控制台打印出如下内容:
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
105
110
115
120
125
130
135
140
145
150
155
几秒钟后,我不明白为什么速度会加快。
最佳答案
您正在 paintComponent()
方法中创建一个计时器,每次重新绘制组件时,该方法都会生成一个新计时器。
您看到的“加速”是您创建的大量计时器同时生效。
您可以尝试仅创建一次计时器,这样可以防止这种情况发生。
关于Java 计时器通过重绘加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27159840/