Таймер Java ускоряется с перерисовкой

1

В настоящее время я делаю некоторые основные графики с таймером в 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
    что не так с этим выводом ??
  • 0
    Краска для рисования, никогда не меняйте состояние всего, что может повлиять на процесс рисования
Теги:
timer
graphics
jpanel

2 ответа

2
Лучший ответ

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

"Ускорение", которое вы видите, - это большое количество таймеров, которые вы создали, вступая в силу одновременно.

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню