簡體   English   中英

Java計時器可加快重繪速度

[英]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 ,這時它將repaintcomponent ,而前一個也將以此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM