2016-09-08 2 views
2

Я создал анимацию с javax.swing.timer и, похоже, она работает нормально.Остановка «javax.swing.timer» не приостанавливает анимацию

Однако анимация продолжается вечно, поэтому я решил добавить метод timer.stop().

Вот небольшой кусок кода:

public void paintComponent(Graphics g) { 

    super.paintComponent(g); 

    g.setColor(Color.RED); 
    g.fillOval(xGrid, 200, 50, 50); 

    t.start(); 
} 

public void actionPerformed(ActionEvent event) { 

    if (xGrid >= 350) { 

     t.stop(); 
    } 

    xGrid++; 
    repaint(); 
} 

Я ожидаю анимации, чтобы остановить, когда круг достигнет положения (350, 200).

Но это не так. Когда я запускаю программу, она просто выводит то же, что и раньше, при этом анимация немного медленнее.

Это довольно запутанно, может ли кто-нибудь помочь?

Любая помощь будет чрезвычайно оценена,

+3

Просьба представить пример выполнения ([SSCCE] (http://sscce.org)), чтобы мы могли воспроизвести ваше поведение. –

+2

Почему вы вызываете 'start()' в 'paintComponent()'? – trashgod

ответ

3

Вызов repaint() в ваших actionPerformed() графиков реализации более поздний вызов paintComponent(), но ваша реализация paintComponent() затем вызывает start() на Timer. Это создает бесконечный цикл, который поддерживает работу Timer. Как минимум, удалите вызов start() от paintComponent().

+1

Для получения более конкретных рекомендаций, пожалуйста, отредактируйте свой вопрос, включив в него [mcve], который показывает ваш пересмотренный подход. – trashgod

+1

Спасибо за помощь! Да, программа работает правильно. Я не должен доверять никаким случайным учебникам на youtube :) – Kcits

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