When you first start working with animations in Swing, you quickly realize two things about the built-in timers:
• Their simplicity makes building any kind of animation possible.
• Their simplicity makes building any kind of animation incredibly difficult.1
That is, with a time-based callback mechanism like
javax.swing.Timer, you can perform any time-based task, such as varying Swing component characteristics over time, and thus animate your GUI. But the details of implementing such animations are prohibitively tedious, so most developers skip this step and opt for the static component behavior that most GUI toolkits provide by default.
This problem became evident when I first started experimenting ...