2010-06-07 7 views

Répondre

4
import java.util.*; 

class MyTimer extends TimerTask 
{ 
    public void run() 
    { 
    //change image 
    } 
} 

alors dans votre principale, vous pouvez planifier la tâche:

Timer t = new Timer(); 
t.schedule(new MyTimer(), 0, 5000); 

premier numéro est retard initial, le second est le temps entre les appels à run() de votre TimerTask: 5000 est de 5 secondes.

Comme BalusC noté vous décomposez généralement des changements de swing sur thread d'événement AWT. Dans cette cause simple, il ne doit pas créer des problèmes lors du changement de fond d'un filetage extérieur, dans tous les cas, vous devez utiliser

public static void SwingUtilities.invokeLater(Runnable whatToExecute) 

à envoyer votre changement sur le fil droit.

Si vous préférez l'approche BalusC il suffit d'utiliser un ActionListener:

public void BackgroundChange implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
    //change bg 
    } 
} 

javax.swing.Timer t = new javax.swing.Timer(5000, new BackgroundChange()); 

Ils fournissent tous les deux mêmes fonctionnalités, mais celui-ci plus tard, est déjà prêt à travailler avec des fils Swing mantaining compatibilité et éviter les problèmes étranges de synchronisations.

+0

Vous recommandez 'java.util.Timer', pas' javax.swing.Timer'. – BalusC

+0

Je l'ai utilisé à plusieurs reprises pour des tâches similaires à celui-ci et il a toujours travaillé .. par ailleurs si vous préférez la minuterie swing vous suffit de modifier l'approche ayant un __ActionListener__ de style Swing qui implémente votre changement d'arrière-plan. – Jack

+1

quand swing, utilisez toujours javax.swing.Timer – Xorty

Questions connexes