IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Message d'attente pour chaque action


Sujet :

Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Message d'attente pour chaque action
    Bonjour,

    J'ai deux boutons radio (femme, homme) et je dois insérer des actions pour chacun d'eux.

    Par exemple, si je coche femme alors un message ("please waiting To download pic femme") est affiché dans un JTextPanel pendant deux secondes, puis l'image de femme est affichée.

    Et de même pour homme.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    birdButton1.addActionListener(new ActionListener(){
                   public void actionPerformed(ActionEvent event) {
     
                          try {
                              StringBuilder texte0 = new StringBuilder("*******************Please waiting downloading picture Women.....************************");
                              pane.setText(texte0.toString());
                                Thread.sleep(2000);                 //1000 milliseconds is one second.
                            } catch(InterruptedException ex) {
                                Thread.currentThread().interrupt();
                            } 
     ImageIcon icon1 = new ImageIcon(new ImageIcon("rtosagt.png").getImage());
                                labe.setIcon(icon1);
     }
               } );
    Le problème est que le message ne s'affiche pas et seule l'image est affichée.

    Si je supprime le code de l'image alors en cliquant sur le bouton, il y a une attente de 2 secondes puis le message s'affiche. Ce qui ne correspond pas à mes besoins.
    Je souhaiterais que ce message s'affiche pendant 2 secondes puis affiche l'image.

    Quelqu'un saurait-il m'indiquer comment procéder ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tout ce que tu fais dans un actionListener empêche la mise à jour de l'affichage. Il ne faut donc jamais faire de Sleep dedans. Plus généralement, on ne fait jamais de traitement long / lent dans l'EDT. Plus d'infos à ce sujet dans les FAQ et le tutoriaux java de DVP. Le résultat de ton code c'est que tou ce fais bien au moment voulu dans ton modèle swing, mais l'interface n'est jamais dessinée pendant ce temps là => tu ne vois rien se passer.

    Pour ton cas, le plus simple est de déléguer la deuxième partie à un Timer swing:

    En java 8, parce que c'est plus court à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    birdButton1.addActionListener((event) -> switchToWoman());
    //....
    public void switchToWoman(){
        pane.setText("*******************Please waiting downloading picture Women.....************************");
        Timer t = new Timer(2000,(event) -> switchToWomanIcon());
        t.setRepeats(false);
        t.start();
    }
    public void switchToWomanIcon(){
     ImageIcon icon1 = new ImageIcon(new ImageIcon("rtosagt.png").getImage());
     labe.setIcon(icon1);
    }

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tout ce que tu fais dans un actionListener empêche la mise à jour de l'affichage. Il ne faut donc jamais faire de Sleep dedans. Plus généralement, on ne fait jamais de traitement long / lent dans l'EDT. Plus d'infos à ce sujet dans les FAQ et le tutoriaux java de DVP. Le résultat de ton code c'est que tou ce fais bien au moment voulu dans ton modèle swing, mais l'interface n'est jamais dessinée pendant ce temps là => tu ne vois rien se passer.

    Pour ton cas, le plus simple est de déléguer la deuxième partie à un Timer swing:

    En java 8, parce que c'est plus court à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    birdButton1.addActionListener((event) -> switchToWoman());
    //....
    public void switchToWoman(){
        pane.setText("*******************Please waiting downloading picture Women.....************************");
        Timer t = new Timer(2000,(event) -> switchToWomanIcon());
        t.setRepeats(false);
        t.start();
    }
    public void switchToWomanIcon(){
     ImageIcon icon1 = new ImageIcon(new ImageIcon("rtosagt.png").getImage());
     labe.setIcon(icon1);
    }
    Merci beaucoup pour votre aide,
    mais malheureusement je n'utilise pas java 8. j'utilise actuellement java 6
    je change un peu l'idée comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    birdButton.addActionListener(new ActionListener(){
    			   public void actionPerformed(ActionEvent event) {
    				   final JDialog d = new JDialog();  
    			        JPanel p1 = new JPanel(new GridBagLayout());  
    			        final JLabel lab= new JLabel("please Wait");
    			        p1.add(lab,new GridBagConstraints());  
    			        d.getContentPane().add(p1);  
    			        d.setSize(300,100);  
    			           d.setLocationRelativeTo(this);  
    			        d.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);  
    			        d.setModal(true);  
     
    			        Thread t = new Thread(){  
    			          public void run(){  
    			            for (int x = 0; x <= 100; x+=10)  
    			            {  
    			              final int selection = x;  
    			              SwingUtilities.invokeLater(new Runnable(){//do swing work on EDT  
    			                public void run(){  
    			                  lab.setText("Please Wait for loading picture women  "+selection+"%");  
    			                }  
    			              });  
    			              try  
    			              {  
    			                Thread.sleep(1000);  
    			              }  
    			              catch (InterruptedException e) {e.printStackTrace();}  
    			            }  
    			            SwingUtilities.invokeLater(new Runnable(){//do swing work on EDT  
    			              public void run(){  
    			                d.dispose();  
    			               ImageIcon icon1 = new ImageIcon(new ImageIcon("rtosagt.png").getImage());
                                              labe.setIcon(icon1);
    			              }  
    			            });  
    			          }  
    			        };  
    			        t.start();  
    			        d.setVisible(true);
    			   }
    		   } );
    je trouve une erreur au niveau de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     d.setLocationRelativeTo(this);
    je ne sais pas comment corriger ce morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     the method setLocationRelativeTo(Component) in the type Window is not applicable for the arguments (new ActionListener(){})
    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    remplace le this par TaClassEnglobante.this

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    remplace le this par TaClassEnglobante.this
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. message pour chaque paquet capté par firewall
    Par hamzawhy dans le forum Linux
    Réponses: 1
    Dernier message: 29/05/2013, 21h57
  2. Réponses: 3
    Dernier message: 18/02/2013, 17h51
  3. Message d'attente lors d'une action struts 2
    Par cyclopsnet dans le forum Struts 2
    Réponses: 2
    Dernier message: 13/10/2010, 15h10
  4. Réponses: 8
    Dernier message: 13/07/2009, 08h57
  5. [Composants] TRichEdit: Une police pour chaque ligne
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2003, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo