Метод за рисуване по принцип трябва да се използва само за рисуване. Не трябва да спира или да пуска таймер.Tрябва да забравиш за вкарването на таймер в метода за рисуване и след това да сложиш таймер, който да повтаря, така че продължителните event-и да се генерират.
За алтернативен подход – виж анимираната икона:
https://tips4java.wordpress.com/2009/06/21/animated-icon/
Анимираната икона Animated Icon ще съдържа списък с икони, последователни базирани на таймер. Когато таймера удари => следващата икона ще се изобрази. Можеш да конфигурираш анимацията да бъде или продължителна или да избереш колко цикъла да изобразява всяка икона.
Забележка: този начин би трябвало да е по-ефикасно, понеже просто я рисува наново,а не целия компонент.
Ако не ти харесва идеята да правиш всички тези икони за анимацията, можеш да ползваш Завъртяната икона :
https://tips4java.wordpress.com/2009/04/06/rotated-icon/
С тоя клас RotatedIcon можеш да си настроиш градусите на ротация на иконата. След това таймерът се отделя изцяло от класа. След това като мине таймера можеш да дигнеш градусите на ротация.
Ето ти пример с AnimatedIcon:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SSCCE extends JPanel
{
public SSCCE()
{
setLayout( new BorderLayout() );
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("1", new JPanel());
tabbedPane.add("2", new JPanel());
add(tabbedPane);
AnimatedIcon icon = new AnimatedIcon(tabbedPane, 250, 3);
ImageIcon duke = new ImageIcon( "copy16.gif" );
icon.addIcon( duke );
for (int angle = 30; angle < 360; angle += 30)
{
icon.addIcon( new RotatedIcon(duke, angle) );
}
tabbedPane.setIconAt(0, icon);
icon.start();
}