[英]Java timer speeds up with repaint
我目前正在使用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()
方法中創建一個計時器,每次重新繪制組件時都會生成一個新計時器。
您看到的“加速”是您創建的大量計時器同時生效。
您可以嘗試僅創建一次計時器,以防止發生這種情況。
作為@APerson說,原因是數額巨大的Timers
會派生每次你的時間component
被粉刷一新,第一次的時候你的組件是被系統調用它增加了1個定時器與時間間隔1000毫秒內存,后1000毫秒Timer
會重新粉刷component
這將導致在內存中添加一個新的Timer
,第二個Timer
將在1000毫秒后添加新的Timer
,這時它將repaint
該component
,而前一個也將以此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.