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

Composants Java Discussion :

JProgressBar n'evolue pas à mesure du changement de sa valeur?


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut JProgressBar n'evolue pas à mesure du changement de sa valeur?
    Bonjour à tous,

    C'est l'histoire d'une simple progressBar dont l'affichage de la jauge n'avance pas quand je fais progBar.setValue(progBar.getValue()+1).

    C'est vrai que cette action mon programme l'execute plusieurs fois de suite, très rapidement.. c'est donc un problème de raffraichissement. Et je l'ai confirmé, car quand je passe la souris sur cette barre, ça valeur augmente!

    J'ai essayé progBar.repaint() qui n'a pas donné non plus une progression en temps réel .
    Que faire ?

    Merci

  2. #2
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Bonsoir,

    Et si tu bindais la valeur de la progress bar ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    Bonsoir X-plode,

    je ne sais pas ce que veut dire binder la valeur

    Merci

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    Bonjour,
    Merci pour les liens que vous m'avez attaché, j'ai essayé de faire pareil que dans l'exemple donné pour la progress bar mais ça ne marche toujours pas. Que faire ?
    D'autres suggéstions ?

    Merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    j'ai un thread qui effectue un téléchargement, et après la réception de chaque paquet j'ai mis à jour la barre de progression avec la méthode suivante que j'ai trouvé au lien proposé par sinok :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void majProgress ()
    	{	if ( SwingUtilities.isEventDispatchThread () )
    		{	progress.setValue (progress.getValue()+1);
    		}
    		else
    		{	Runnable callMAJ = new Runnable ()
    			{	public void run ()
    				{	majProgress ();
                    }
                };
                SwingUtilities.invokeLater (callMAJ);
    		}
    	}

  7. #7
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Et ? Ca te donne quoi comme résultat avec cette dernière méthode ?

    Toujours quelque chose de saccadé ?

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Utilise un SwingWorker couplé à un ChangeListener pour effectuer les traitements en tâches de fond et mettre à jour les données de l'interface dans l'EDT ! C'est fait pour cela

    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
    	JProgressBar progress = new JProgressBar();
     
    	// On crée le SwingWorker qui va effectuer les traitements :
    	SwingWorker<String, Object> worker = new SwingWorker<String, Object>() {
     
    		/* Les traitements en tâches de fond : */
    		@Override
    		protected String doInBackground() throws Exception {
    			for (int i=0; i<10; i++) {
    				Thread.sleep(500); // simule un traitement long
    				setProgress(i*10);
    			}
    			return "OK"; // retourne un résultat
    		}
    	};
     
    	// On associe le SwingWorker à la JProgressBar
    	worker.addPropertyChangeListener(new ProgressBarChangeListener(progress));
     
    	// Et on exécute la tâche en background
    	worker.execute();

    Avec la classe ProgressBarChangeListener qui correspond à quelque chose comme cela :
    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
    public class ProgressBarChangeListener implements PropertyChangeListener {
    	private final JProgressBar progress;
     
    	public ProgressBarChangeListener(JProgressBar progress) {
    		this.progress = progress;
    	}
     
    	public void propertyChange(PropertyChangeEvent evt) {
    		if ("state".equals(evt.getPropertyName())) {
    			SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();
    			switch (state) {
    			case PENDING:
    			case STARTED:
    				this.progress.setValue(this.progress.getMinimum());
    				break;
    			case DONE:
    				this.progress.setValue(this.progress.getMaximum());
    				break;
    			}
    		} else if ("progress".equals(evt.getPropertyName())) {
    			this.progress.setValue((Integer) evt.getNewValue());
    		}		
    	}
    }
    a++

Discussions similaires

  1. Avoir une musique de fond qui ne coupe pas lors du changement de page
    Par keokaz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2014, 17h22
  2. ne pas autoriser le changement de nom d'un onglet
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2009, 22h01
  3. Réponses: 5
    Dernier message: 23/10/2007, 11h59
  4. Réponses: 4
    Dernier message: 16/10/2006, 21h20
  5. Ne pas sauver les changements d'un TableModel
    Par rampageXT dans le forum Langage
    Réponses: 1
    Dernier message: 24/08/2006, 11h32

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