2014-11-26 2 views
1

В настоящее время я делаю некоторые основные графики с таймером в JPanel, но я не могу понять, почему таймер растет экспоненциально.Java-таймер ускоряется с перерисовкой

Вот мой код:

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

Что не так с этим выходом ??? – Muhammad

+0

Краска для живописи, никогда не меняет состояния всего, что может повлиять на процесс окраски – MadProgrammer

ответ

2

Вы создаете таймер в методе paintComponent(), который генерирует новый таймер каждый раз, когда компонент перекрашивается.

«Ускорение», которое вы видите, - это большое количество таймеров, созданных вами одновременно.

Вы можете попытаться создать таймер только один раз, что предотвратит это.

0

Как @APerson сказал, что причина огромное количество Timers что нерестится каждый раз, когда ваш component перекрашивают, когда первый раз, когда ваш компонент называется системой он добавляет 1 Таймер памяти с 1000 мс временного интервала, после 1000ms Timer будет перерисовывать component, что приведет к добавлению нового Timer в память. 2-й Timer также добавит новый Timer после 1000 мс, если он repaintcomponent и предыдущий тоже и так далее.

Смежные вопросы