我目前在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
几秒钟之后,我无法弄清楚为什么会加速。
答案 0 :(得分:2)
您正在paintComponent()
方法中创建一个计时器,每次重新绘制组件时都会生成一个新的计时器。
您看到的“加速”是您创建的大量计时器同时生效。
您可以尝试仅创建一次计时器,以防止发生这种情况。
答案 1 :(得分:0)
正如@APerson所说,原因是每次重新绘制Timers
时会产生大量的component
,当系统第一次调用你的组件时,它会向内存添加1个Timer时间间隔1000毫秒,1000毫秒Timer
将重新绘制component
,这将导致向内存中添加新的Timer
,现在第二个Timer
也将添加新的Timer
在1000毫秒之后它将repaint
component
和前一个等等。