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

Interfaces Graphiques en Java Discussion :

Problèmes avec une barre de progression


Sujet :

Interfaces Graphiques en Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problèmes avec une barre de progression
    Bonjour, bonsoir les gens

    Depuis un certains temps je me suis mis à créer une application en JAVA assez banale pour éviter de perdre les connaissances que j'avais sur le langage étant donné que dans mes études je n'en fais plus pour le moment.

    Cette application est censée me permettre de gérer une liste non exhaustive de film que j'ai vu (oui ça n'a pas beaucoup d'intérêt, je le concède). A l'origine je gérais cette liste via un fichier excel.

    C'est pourquoi mon application permet d'aller lire ce fichier et de créer les objets films que je veux pour aller les stocker dans ma base de données. La liste est assez longue et donc l'insertion de tous les films prends du temps, temps durant lequel je ne peux rien faire sur mon application.

    J'ai vu que pour comblé l'attente on pouvait créer des barres de progression et mon problème arrive.

    Pour m'aider j'ai cherché sur internet différente façon d'y parvenir et j'ai trouvé la façon la plus simple sur le site sur lequel nous sommes :
    http://www.developpez.net/forums/d30...gression-java/

    Le petit exemple présenté marche très bien dans une application à part (je l'ai testé). Cependant une fois que j'essaye de le mettre dans le code de mon application, ça ne marche plus c'est à dire que au moment où je suis censé voir la progression, la fenêtre contenant la barre est blanche et une fois la progression finie tout apparaît à l'écran.

    La première pièce jointe montre bien la fenêtre de la barre de progression qui est blanche.
    Et la deuxième montre que la progression est finie et que tout apparaît.

    Maintenant voici les portions gérant cette barre.
    En premier la fenêtre contenant la barre de progression.
    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
    package fenetre;
     
    public class Progression extends javax.swing.JFrame {
        public Progression(int nbFilm) {
            initComponents();
            setLocationRelativeTo(null);
            setTitle("Progression");
            this.fin.setEnabled(false);
            this.film.setText("0");
            this.filmTot.setText(String.valueOf(nbFilm));
        }
     
        public void majValeur(int valeur, int nbFilm){
            this.barre.setValue(valeur);
            this.film.setText(String.valueOf(nbFilm));
            if(valeur == 100){
                this.fin.setEnabled(true);
            }
        }
     
        @SuppressWarnings("unchecked")
        //Generated Code                      
     
        private void finActionPerformed(java.awt.event.ActionEvent evt) {                                    
            dispose();
        }                                   
     
        // Variables declaration - do not modify                     
        private javax.swing.JProgressBar barre;
        private javax.swing.JLabel film;
        private javax.swing.JLabel filmTot;
        private javax.swing.JButton fin;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel4;
        // End of variables declaration                   
    }
    La fenêtre est créée automatique en fonction des composants choisis grâce à Netbeans (je sais pas si c'est clair mais en gros le code que j'ai écrit là est court)
    Ensuite la fonction dans laquelle j'appelle ma méthode majValeur(int valeur)
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    private void inserer(int debut, int fin){
            dispose();
            try{
                FileInputStream fis = new FileInputStream(this.fichierExcel);
                XSSFWorkbook wbk = new XSSFWorkbook(fis);
                XSSFSheet sht = wbk.getSheetAt(0);
                int ligneDeb, ligneFin;
                if(debut == 0 && fin == 0){
                    ligneDeb = sht.getFirstRowNum() + 1;
                    ligneFin = sht.getLastRowNum();
                }else{
                    ligneDeb = debut;
                    ligneFin = fin;
                }
                Progression prog = new Progression(ligneFin-ligneDeb+1);
                prog.setVisible(true);
                prog.majValeur(0, 0);
                for(int i = ligneDeb; i <= ligneFin; i++){
                    XSSFRow row = sht.getRow(i);
                    XSSFCell cRang = row.getCell(Integer.valueOf(this.rang.getText())-1);
                    XSSFCell cTitre = row.getCell(Integer.valueOf(this.titre.getText())-1);
                    XSSFCell cNumero = row.getCell(Integer.valueOf(this.numero.getText())-1);
                    XSSFCell cDetail = row.getCell(Integer.valueOf(this.detail.getText())-1);
                    XSSFCell cAnnee = row.getCell(Integer.valueOf(this.annee.getText())-1);
                    cRang.setCellType(Cell.CELL_TYPE_STRING);
                    cTitre.setCellType(Cell.CELL_TYPE_STRING);
                    cNumero.setCellType(Cell.CELL_TYPE_STRING);
                    cDetail.setCellType(Cell.CELL_TYPE_STRING);
                    cAnnee.setCellType(Cell.CELL_TYPE_STRING);
                    String rangLoc = cRang.getStringCellValue();
                    String titreLoc = cTitre.getStringCellValue();
                    String numeroLoc = cNumero.getStringCellValue();
                    String detailLoc = cDetail.getStringCellValue();
                    String anneeLoc = cAnnee.getStringCellValue();
                    Film film;
                    if(numeroLoc.equals("")){
                        film = new Film("FILM", rangLoc, titreLoc, Integer.valueOf(anneeLoc));
                    }else{
                        film = new Franchise("FRANCHISE", rangLoc, titreLoc, Integer.valueOf(anneeLoc), Integer.valueOf(numeroLoc), detailLoc);
                    }
                    //this.dao.ajouter(film);
                    this.liste.put(film.getId(), film);
                    int val = ((i-ligneDeb+1)*100)/(ligneFin-ligneDeb+1);
                    try{
                        Thread.sleep(20);
                        prog.majValeur(val, (i-ligneDeb+1));
                    }catch(InterruptedException ex){
                        System.out.println("plop");
                    }
                }
                this.modele.setListe(liste);
                this.modele.fireTableDataChanged();
                /*dispose();
                JOptionPane.showMessageDialog(this, "Fichier inséré avec succès");*/
            } catch (FileNotFoundException ex) {
                Logger.getLogger(ChargerFilm.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(ChargerFilm.class.getName()).log(Level.SEVERE, null, ex);
            }
    J'ai en fait pris le code que j'ai trouvé et je l'ai encastré dans ma méthode en adaptant ma méthode pour que la valeur de la progression se mette à jour.

    Donc voilà. Cela fait plusieurs journées que je m'esquinte les yeux sur mon écran à essayer de trouver une solution sur Internet et dans le désespoir de ne pas la trouver je post un nouveau topique sur le forum.

    Voilà voilà les gens, j'espère que vous pourrez m'aider.
    Merci par avance
    Images attachées Images attachées   

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Ca, c'est probablement parce que tu fait tout ton calcul dans l'interface graphique, ce qu'il ne faut jamais faire. Car ça bloque tout l'affichage de ton application.

    Le plus simple est d'utiliser un ProgressMonitor pour l'affichage, et de faire ton traintement long en utilisant un SwingWorker.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Lecture obligatoire pour toute personne faisant du Swing:

    http://gfx.developpez.com/tutoriel/j...ing-threading/

Discussions similaires

  1. Remplissage auto d'une colonne avec une barre de progression
    Par Chikatilo dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 26/06/2008, 17h07
  2. Problème avec une barre d'outil "perso"
    Par semyr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/01/2008, 15h09
  3. Problème avec une Barre de Progression
    Par hugo69 dans le forum Access
    Réponses: 1
    Dernier message: 15/12/2006, 15h37
  4. Problème avec une TStrinGrid et barre de défilement
    Par steph_1 dans le forum Composants VCL
    Réponses: 10
    Dernier message: 16/06/2005, 14h25

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