Maintenant qu'on sait modifier l'aspect du composant en cours de programme, il est très simple de créer une animation : il suffit de modifier l'aspect du composant à intervalles réguliers.
L'outil adapté pour cela est la classe Timer de la bibliothèque javax.swing, associée aux outils de la bibliothèque java.awt.event.
Un Timer déclenche à intervalle régulier l'action qu'on lui associe.
Principe général pour déclencher une action toutes les n millisecondes:
Timer horloge=new Timer(n ,new ActionListener(){ public void actionPerformed(ActionEvent e){ .... Action à effectuer } });Le Timer est mis en marche par l'instruction
horloge.start();Par exemple, Appel peut ressembler à cela (en supposant que Fenetre crée un panneau de type PanneauPerso3) :
import java.awt.*; import java.awt.event.*; import javax.swing.Timer; public class Appel { static int d; public static void main(String[] args) { final Fenetre une_fenetre=new Fenetre(); final Graphics2D g=une_fenetre.panneau.dessin.createGraphics(); d=(int)(500*Math.sqrt(2)); Timer horloge=new Timer(8,new ActionListener(){ public void actionPerformed(ActionEvent e){ // actions à exécuter toutes les 8ms g.setColor(new Color(60,80,128)); g.fillRect(0,0,500,500); g.setColor(Color.yellow); g.drawOval((500-d)/2,(500-d)/2,d,d); d=d-2; if (d<2){ d=(int)(500*Math.sqrt(2)); } une_fenetre.panneau.repaint(); // fin des actions déclenchées par le Timer } }); horloge.start(); } }Toutes les 8ms le Timer appelé horloge déclenche le remplissage de l'image(ce qui efface le dessin précédent) et le tracé d'un cercle de diamètre d. La valeur de d est modifiée à chaque passage. La méthode repaint du panneau est appelée pour actualiser le dessin à chaque passage (à ne pas oublier !).