Attente java

cedlapinte Messages postés 13 Statut Membre -  
cedlapinte Messages postés 13 Statut Membre -
Bonjour,
j'ai un petit probleme, je veux realiser une interface java et j'aimerais que lorsque j'appuie sur un bouton le message "j'ai faim" s affiche pendant 3 secondes et apres le message devient "je n'est plus faim". J'ai utiliser :
try{
Thread.sleep(3000);
}catch(InterruptedException e){}
Le probleme est que à l affichage il y a le message "je n'est plus faim" qui s affiche apres 3 secondes mais avant je n'est rien qui s'affiche. Je ne vois pas quoi changer
A voir également:

11 réponses

BadGuitarist Messages postés 373 Statut Membre 27
 
Bonjour,
Et si tu inverses les instructions :

Affichage "J'ai faim"
Thread.sleep(3000);
Affichage "Je n'ai plus faim"
Thread.sleep(3000);
Affichage "" // effacer la zone d'infos
0
cedlapinte Messages postés 13 Statut Membre
 
Pour etre plus precis voila ce que jai fait :

public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if(source == boutonMiseEnMarche) {
labelEtat.setText("<html><center>J'ai faim</center></html>");
try{
Thread.sleep(3000);
}
catch(InterruptedException e){}
labelEtat.setText("Je n'est plus faim");
}
0
BadGuitarist Messages postés 373 Statut Membre 27
 
Ton code m'étonne car tu sembles mélanger 2 technologies.
Excuse-moi pour les remarques et questions que je fais : je ne cherche qu'à comprendre :

D'un côté :
  actionPerformed(ActionEvent evt) <=> tu utilises une technologie AWT/SWING

De l'autre, pour affecter le libellé de ton bouton, tu utilises une technologie Web HTML
  labelEtat.setText("<html><center>J'ai faim</center></html>");


Je pense que tu es dans un environnement Web : J2EE mais je n'en suis pas sûr.
Peux-tu confirmer ou infirmer, STP.
0
cedlapinte Messages postés 13 Statut Membre
 
tu a raison je suis dans un environnement Web : J2EE ; mais le java n'est pas mon fort.
En ce qui concerne : "labelEtat.setText("<html><center>J'ai faim</center></html>");" j'ai utilisée cette methode pour manipuler facilement le texte dans le label (pouvoir ecrire sur plusieurs lignes, centrer le texte) j'ai trouvée cette methode plus simple
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BadGuitarist Messages postés 373 Statut Membre 27
 
En J2EE, tu pouvais passer par Javascript pour modifier lelabel du bouton sur l'évènement onclick().

Ensuite pour changer de message au bout de 3 secondes, tu fais appel à la fonction Javascript window.setTimeout(uneFonctionAAppeler, 3000)

Voici un exemple (que je viens de faire et que j'ai testé) pour te montrer ce qu'il est possible de faire et qui ressemble (si j'ai bien compris) à ce que tu veux faire :

  <html>
    <head>
      <script language="javascript" type="text/javascript"> 
        function changerLabelBouton1()
        {
          document.getElementById("idBouton1").value="Je n ai plus faim";
          window.setTimeout(changerLabel2Bouton1, 3000);
        }
        function changerLabel2Bouton1()
        {
          document.getElementById("idBouton1").value="Je digère ...";
        }
      </script>
  </head>
    <body>
      <input type="button" value="J ai faim" id="idBouton1" onclick="changerLabelBouton1()" ></input>
    <body>
  </html>
  


0
cedlapinte Messages postés 13 Statut Membre
 
dans mon programme je n'utilise pas le langage HTML (a part pour remplacer des System.out.println("Blablabla")). Moi je voudrais l'équivalent de ton : window.setTimeout(changerLabel2Bouton1, 3000); en langage JAVA
0
BadGuitarist Messages postés 373 Statut Membre 27
 
Bonjour,

Recherche cela : Thread.
0
cedlapinte Messages postés 13 Statut Membre
 
j'ai deja essayer et rien n'a marche je ne comprend pas trop le threads
0
BadGuitarist Messages postés 373 Statut Membre 27
 
Si tu veux implémenter ta solution en n'utilisant que Java, il faudra bien passer par les Thread.

Donne-moi ce que tu as fais pour implémenter cette gestion de libellé (version avec les Thread) pour que je jette un coup d'oeil.
0
cedlapinte Messages postés 13 Statut Membre
 
Je te laisse la partie de code concernée par mon probleme. Avan ce code j'ai créer la fenetre contenant kes boutons et labels de mon interface graphique.

public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if(source == boutonMiseEnMarche) {
boutonMiseATable.setEnabled(true); // Rend le boutonMiseATable actif
boutonSortieDeTable.setEnabled(true); // Rend le boutonSortieDeTable actif
boutonMiseATable.addActionListener(this); // Met le boutonMiseATable en écoute
boutonSortieDeTable.addActionListener(this); // Met le boutonSortieDeTable en ecoute
/* je veux que les 2 lignes de texte suivantes s'affichent pendant 3 secondes lorsque j'appuie sur le boutonMiseEnMarche*/
labelCompteRendu.setText("<html><center>Bonjour je suis Bill</center></html>");
labelEtat.setText("<html><center>Je suis dans mon état normal <br> Je n'est pas faim, je ne pleure pas</center></html>");
/* Apres ces 3 secondes je veux faire labelEtat.setText("<html><center>J'ai faim</center></html>"); qui s'affiche pendant 2 secondes*/
boutonMiseEnMarche.setEnabled(false); // Rend le boutonMiseEnMarche inactif
}
else if(source == boutonMiseATable) {
labelEtat.setText("Bill est à table");
}
else if(source == boutonSortieDeTable) {
labelEtat.setText("Bill n'est plus à table");
}
}

/* Je pense qu'il faut utiliser la partie suivante mais je nesais pas comment*/
/* public class Temporisation extends Thread {
int TempsDAutonomie;

public Temporisation (int temps) {
this.TempsDAutonomie = temps;
}

private void Attente(int i) throws InterruptedException {
this.TempsDAutonomie = i;
this.start ();
this.wait(i);

}

}*/
0
cedlapinte Messages postés 13 Statut Membre
 
j'ai essayé thread.sleep(); mais sa n'a pas marché
0