Temps d'attente entre 3 instructions JAVA
Résolu
Nouyou
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
Nouyou Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Nouyou Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une JFrame qui contient un label et un bouton , je veux changer la couleur du texte du label 3 fois en cliquant sur le bouton .
J'ai fait une boucle for qui contient un Thread avant de changer la couleur du label . Mais le problème qu'il y'a une attente de 3 secondes mais le label prend la couleur cyan sans passer par les couleurs blue et red .
Voici le code et Merci de m'aider :)
J'ai une JFrame qui contient un label et un bouton , je veux changer la couleur du texte du label 3 fois en cliquant sur le bouton .
J'ai fait une boucle for qui contient un Thread avant de changer la couleur du label . Mais le problème qu'il y'a une attente de 3 secondes mais le label prend la couleur cyan sans passer par les couleurs blue et red .
Voici le code et Merci de m'aider :)
public void actionPerformed(ActionEvent e) { if(e.getSource()==bouton){ Color [] tab = {blue,red,cyan}; int t=0; for (int i=0;i<3;i++) { try { Thread.sleep(3000); } catch (InterruptedException ex) { Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex); } label.setForeground(tab[i]); }
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Temps d'attente entre 3 instructions JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Ai suite 3 - Télécharger - Optimisation
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
2 réponses
Bonsoir,
La JFrame ne se rafraîchit qu'une fois l'actionPerformed terminé, donc tant que tu ne rends pas la main ça ne fait rien, et une fois fini (dans ton cas au bout de 3*3000 ms), c'est le dernier état qui est affiché (donc cyan, sans passer par blue ou red).
Il faudrait que tu regardes comment fonctionnes les SwingWorker, c'est le même principe qu'un Thread mais spécifiquement pour les interfaces graphiques, cela permet de déclencher une action, tout en terminant l'action en cours.
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
La confiance n'exclut pas le contrôle
La JFrame ne se rafraîchit qu'une fois l'actionPerformed terminé, donc tant que tu ne rends pas la main ça ne fait rien, et une fois fini (dans ton cas au bout de 3*3000 ms), c'est le dernier état qui est affiché (donc cyan, sans passer par blue ou red).
Il faudrait que tu regardes comment fonctionnes les SwingWorker, c'est le même principe qu'un Thread mais spécifiquement pour les interfaces graphiques, cela permet de déclencher une action, tout en terminant l'action en cours.
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
La confiance n'exclut pas le contrôle
public void actionPerformed(ActionEvent e) {
if(e.getSource()==bouton){
worker=new SwingWorker(){
@Override
protected Void doInBackground() throws Exception {
Color [] tab = {blue,red,cyan};
int t=0;
for (int i=0;i<3;i++)
{ try {
Thread.sleep(2000);
autopic.setForeground(tab[i]);
} catch (Exception ex) {
Logger.getLogger(Fenetre.class.getName()).log(Level.SEVERE, null, ex);
}
}return null;}
};
}}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
Fenetre F=new Fenetre();
}
});
}