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 :

Faire une barre de chargement


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut Faire une barre de chargement
    Bonjour,

    J'ai une petite fenetre toute bête, avec une JComboBox et un bouton.
    Vu que l'action déclenchée pas le bouton est longue à s'exécuter, j'aimerai dans cette meme fenetre, ajouter un jlabel "en cours de chargement..." par exemple.

    Seulement voilà, quand je clique sur le bouton, il lance bien l'action mais ne modifie pas ma fenêtre...

    Petit bout de 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     public void jButtonVisual_actionPerformed(ActionEvent e) {
            System.out.println("Ajout info chargement");
            contentPane = (JPanel) getContentPane();
            jPanel1.setBounds(new Rectangle(19, 169, 362, 91));
            jPanel1.setLayout(gridLayout1);
            jLabel2.setText("Chargement en Cours...");
            gridLayout1.setColumns(1);
            gridLayout1.setRows(2);
            jPanel1.add(jLabel2);
            contentPane.add(jPanel1);
     
     
            System.out.println("Lancement action");
            String cataLib = (String) jComboBoxCata.getSelectedItem();
            int index = cataLib.indexOf(" - ");
            String cataCode = cataLib.substring(0, index);
            String cataName = cataLib.substring(index + 3, cataLib.length());
            VisualisationCatalogue vCata;
            vCata = new VisualisationCatalogue(cataCode, cataName);
            vCata.setVisible(true);
            this.setVisible(false);
     
        }
    Savez-vous pourquoi?

    Merci

  2. #2
    Membre confirmé Avatar de philobedo
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Par défaut
    Il faut peut être que tu fasses un setVisible(true) de ton JPanel1 ou alors un repaint() de toute la fenêtre, avant d'executer ton action.
    Le mieux serait d'insérer une barre de progression, en t'inspirant de la FAQ :
    http://java.developpez.com/faq/java/...E_progress_bar
    ++
    Philobedo

  3. #3
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    est-ce qu'il n'y aurait pas un problème de blocage du thread EDT comme certains ont rencontré??!!?? voir les posts plus anciens peut-être...

  4. #4
    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
    Essaie en employant SwingUtilities.updateComponentTreeUI(tonContentPane) (Je suis pas très sûr du nom de la méthode) ou alors un revalidate().

  5. #5
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par wichtounet
    Essaie en employant SwingUtilities.updateComponentTreeUI(tonContentPane) (Je suis pas très sûr du nom de la méthode) ou alors un revalidate().

    J'ai tenté ta solution mais en vain...
    Là je sèche litérallement.

  6. #6
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Bon j'ai enfin réussi mon affichage avec le code suivant :
    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
     
    public void jButtonVisual_actionPerformed(ActionEvent e) {
            //ajoute le panel de chargement en cours
            addChargementInfos();
     
            //thread de lancement de VisualisationCatalogueV2
            Thread vct = new visualCataThread(jComboBoxCata);
            //lancement du thread
            vct.start();
            //this.dispose();
        }
     
        public void addChargementInfos() {
            Runnable code = new Runnable() {
                public void run() {
                    System.out.println("Ajout info chargement");
                    contentPane = (JPanel) getContentPane();
                    jPanel1.setBounds(new Rectangle(19, 169, 362, 91));
                    jPanel1.setLayout(gridLayout1);
                    jLabel2.setText("Chargement en Cours...");
                    jLabel3.setHorizontalAlignment(SwingConstants.CENTER);
                    jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);
                    jLabel3.setIcon(imgCharg);
                    gridLayout1.setColumns(1);
                    gridLayout1.setRows(2);
                    jPanel1.add(jLabel2);
                    jPanel1.add(jLabel3);
                    contentPane.add(jPanel1);
                    validate();
     
                }
            };
     
            if (SwingUtilities.isEventDispatchThread()) {
                code.run();
            } else {
                SwingUtilities.invokeLater(code);
            }
        }
    mon thread :

    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
     
    class visualCataThread extends Thread {
        JComboBox jComboBoxCata;
     
        public visualCataThread(JComboBox jComboBoxCata) {
            this.jComboBoxCata = jComboBoxCata;
        }
     
        public void run() {
            System.out.println("Lancement action");
            String cataLib = (String) jComboBoxCata.getSelectedItem();
            int index = cataLib.indexOf(" - ");
            String cataCode = cataLib.substring(0, index);
            String cataName = cataLib.substring(index + 3, cataLib.length());
            VisualisationCatalogue vCata;
            vCata = new VisualisationCatalogue(cataCode, cataName);
            vCata.setVisible(true);
        }
     
    }
    Voilà maintenant le hic c'est que je ne sais pas à quel moment je peux clore ma premiere fenetre....
    Avez-vous une idée pour moi?

    Merci pour l'aide deja immense que vous m'avez apportée!

  7. #7
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par xixi31
    est-ce qu'il n'y aurait pas un problème de blocage du thread EDT comme certains ont rencontré??!!?? voir les posts plus anciens peut-être...

    J'ai tenter autre chose :
    Lancher un thread : une fenetre JChargement qui ne contient qu'une seule image.

    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
     
    public void jButtonVisual_actionPerformed(ActionEvent e) {
            Thread t = new Thread(new Runnable() {
                public void run() {
                    JChargement charg = new JChargement();
                    charg.setVisible(true);
     
                }
            });
            t.start();
            this.dispose();
            System.out.println("Lancement action");
            String cataLib = (String) jComboBoxCata.getSelectedItem();
            int index = cataLib.indexOf(" - ");
            String cataCode = cataLib.substring(0, index);
            String cataName = cataLib.substring(index + 3, cataLib.length());
            VisualisationCatalogue vCata;
            vCata = new VisualisationCatalogue(cataCode, cataName);
            vCata.setVisible(true);
            t.interrupt();
     
        }
    Seul hic, l'image contenue dans la fenetre de chargement ne s'affiche qu'une l'action vCata.setVisible(true); est effectué, avant j'obtient une fenetre vide.
    Auriez-vous une idée?
    Merci

  8. #8
    Membre confirmé Avatar de krolineeee
    Inscrit en
    Mars 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 232
    Par défaut
    Citation Envoyé par philobedo
    Il faut peut être que tu fasses un setVisible(true) de ton JPanel1 ou alors un repaint() de toute la fenêtre, avant d'executer ton action.
    Le mieux serait d'insérer une barre de progression, en t'inspirant de la FAQ :
    http://java.developpez.com/faq/java/...E_progress_bar
    ++
    Philobedo

    Salut,
    J'ai tenté le setVisible(true); et le repaint mais ça ne change rien

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

Discussions similaires

  1. Comment faire pour avoir une barre de chargement pour un SWF externe?
    Par rigolman dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 10/04/2009, 10h49
  2. [Débutant] Comment faire une barre de chargement
    Par Alucard9800XT dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 23/04/2007, 22h04
  3. Réponses: 7
    Dernier message: 26/01/2007, 00h39
  4. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 13h15

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