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

EDT/SwingWorker Java Discussion :

SwingWorker peut il être modal?


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut SwingWorker peut il être modal?
    Bonjour,

    Est-il possible de bloquer les actions utilisateurs sur une application lorsqu'un gros traitement (+affichage de barre de progression) est en cours dans un SwingWorker? J'ai bien tenté de rendre le JDialog, contenant la barre de progression, modal mais cela gèle l'avancement de la barre.
    De même j'ai essayé en créant un autre JDialog (hors et in SwingWorker) mais cela ne fonctionne pas non plus (hors => le traitement ne se lance pas tant que le jdialog n'est pas fermé, in => géle de la barre de progression).

    Merci.

  2. #2
    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
    Par défaut
    Comment mets tu à jour ta barre de progression dans le SwingWorker?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Elle se faut dans une boucle for dans le doInBackground() avec un setProgress()

    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
     
    private int recalculStock(double progressStart, double progressEnd) {
      double step = (progressEnd - progressStart) / _listArticles.size();
      for (Article article:_listArticles){
        try {
          progressStart += step;
          publish(article.toString());
          article.setQteStock(article.getQteEnStock());
          ArticleIO.updateArticle(article);
          setProgress((int) progressStart);
        } catch (ControleurException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
      return _listArticles.size();
    }

  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
    Par défaut
    Le setProgress ne met pas automatiquement à jour une JProgressBar.

    Il te faut ajouter un PropertyChangeListener à ton SwingWorker qui va écouter les modifications sur la property progress et les répercuter sur ta progressBar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    final JProgressBar progressBar = new JProgressBar(0, 100);
    PrimeNumbersTask task = new PrimeNumbersTask(textArea, N); 
    task.addPropertyChangeListener(      
       new PropertyChangeListener() {          
          public  void propertyChange(PropertyChangeEvent evt) {              
             if ("progress".equals(evt.getPropertyName())) {
                progressBar.setValue((Integer)evt.getNewValue());
             }
          }     
        }
    );

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Oui oui, il est est, j'ai oublié de le préciser
    Le problème de non mise à jour n'intervient que lorsque mon jdialog est modal.

  6. #6
    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
    Par défaut
    Fais voir le code dans lequel tu lances ton SwingWorker et tu attaches ton listener.

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/07/2006, 12h30
  2. Le nom d'une fenêtre peut-il être modifié dynamiquement ?
    Par jejerome dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2006, 13h37
  3. Réponses: 10
    Dernier message: 20/02/2006, 16h04
  4. [GOF] Fabrique abstraite peut-elle être un Singleton ?
    Par manel007 dans le forum Design Patterns
    Réponses: 7
    Dernier message: 06/01/2005, 10h02
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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