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

AWT/Swing Java Discussion :

PB Visualiser JProgressBar


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de progamer54
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Par défaut PB Visualiser JProgressBar
    salut a tous

    voila j'ai un programme avec un algo long.
    j'ai fais une classe Barre qui extends JFRAME:
    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
     
     
    import javax.swing.*;
     
    public class Barre extends JFrame{
     
     private static final long serialVersionUID = 2L;
    public JProgressBar b;
     
    public Barre(){
    super("ma barre");
      initialize();
    this.setBounds(200,200,200,50);
    b=new JProgressBar(0,100);
    this.getContentPane().add(b);
     
    }
     
    /**
     * This method initializes this
     * 
     */
    private void initialize() {
            this.setTitle("Progression");
     
    }
     
     
     
     
     
    public void avancer(int i) {
     // TODO Auto-generated method stub
     if(i==100){
      b.setValue(100);
      b.repaint();
     }else{
     if (b.getValue()<100){
      b.setValue(b.getValue()+i);
      b.repaint();
     }
     }
    }
    }
    et je l'appel comme ça dans mon autre programme ou est l'algo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Barre bar=new Barre();
          bar.setVisible(true);
          bar.avancer(10);
    ***
     bar.avancer(1);
    ***
     bar.avancer(1);
    Seulement probleme la barre ne s'affiche pleine qu'une fois l'algo terminé.
    c'est a dire que la frame s'affiche bien au début de l'algo. mais qu'on ne voit pas la progression au fur et a mesure des bar.avancer(1); et que a la fin la barre se rempli d'un coup quand l'algo est fini. je pensais que c'etait un probleme de repaint alors j'en ai mis partout mais c'est pas ça. pouvez vous m'aider? merci
    C'est peut etre un probleme de thread?je dois en faire?

    [ Sujet déplacé depuis le forum java par Viena ]
    Les Règles du Forum

  2. #2
    Membre éclairé Avatar de progamer54
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Par défaut
    J'ai mis la barre dans ma fenetre principale. mais ça marche pas non plus
    comme si le repaint() ne se faisait qu'a la fin de l'algo

  3. #3
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ce n'est pas un problème de repaint() normalement mais de threads. Peux-tu montrer ton "algo" plus en détail ? Utilise-tu des threads ? Combien de temps dure l'algo (peut-être que le remplissage se fait juste trop vite) ?

  4. #4
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    tiens, c'est marrant, j'ai eu exactement le même problème hier avec un de mes algo pendant l'execution duquel je souhaitais avoir une barre de progression infinie qui s'affiche et empêche toute autre execution.

    J'ai solutionné le problème en créant une classe algorithme extends Thread, avec un membre JInfiniteProgress (c'est ma barre de progression) que je lui passe à la construction
    et dans l'implémentation de run(), j'ai fait un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i=0;
    while (i<1){
          prepareDonnees();
          executeAlgorithme();
          i++; 
    }
    maBarre.stop();
    et pour appeler mon algorithme, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    maBarre.start();
    Algorithme monAlgo=new Algorithme(maBarre);
    monAlgo.start();
    Enfin bon, un truc du genre. A savoir que ma barre est un peu spécial, c'est un JPanel qui utilise un thread d'animation, voilà !!!

    [EDIT :] d'ailleurs c'est basé sur un exemple du monsieur qui vient de parler !! Merci Gfx !

  5. #5
    Membre éclairé Avatar de progamer54
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Par défaut
    non ça doit pas venir de l'algo qui va trop vite car j'ai le meme probleme avec mon texte dans le Textarea.
    1er chose que je fais dans l'algo c'est:

    textarea1.setText("\nALGO LANCE\n");

    et a la fin j'affiche le résultat de l'algo.
    et ben le 1er message ne s'affiche pas . j'attends 2 ou 3 sec et quand l'algo et fini j'ai tout les messages qui s'affiche d'un coup dans la textarea.
    je pense que le probleme du textarea est le meme que celui du ProgressBar

    et j'utilise pas de thread. quand je clic sur un bouton je fais tout plein de chose. et pendant ce tout plein de chose j'aimerai modifié ma barre et mon textarea c'est tout

  6. #6
    Membre éclairé Avatar de progamer54
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 242
    Par défaut
    voila l'action du bouton
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    public void mouseClicked(java.awt.event.MouseEvent e) {
     
                         textarea1.setText("\nALGO LANCE\n");
                         avancer(0);
                        avancer(20);
                        repaint();
     
                        int i,j;
                        List lk = new LinkedList();
                        String[] PersonneStr;
                        double[] PersonneDbl;
                        Etudiant et;
                        Etudiant etudiant1;
                        Iterator it;
                        //ouverture du fichier excel
                        Workbook workbook;
                        try {
                            workbook = Workbook.getWorkbook(new File(textfield1.getText()));
     
                        //recupération de la première feuille 
                        Sheet sheet = workbook.getSheet(0);
     
                         PersonneStr = new String[3];
                         PersonneDbl = new double[29];
     
                         for (i=1;i<70;i++){
     
                             NumberFormat monFormatteurDeNombre = NumberFormat.getInstance();
     
                             for (j=0;j<2;j++){
                                 Cell a1 = sheet.getCell(j,i); 
                                 String stringa1 = a1.getContents();
                                 PersonneStr[j]=stringa1;
                                 avancer(2); 
     
                             }
                             for (j=2;j<29;j++){
                                 Cell a1 = sheet.getCell(j,i);
                                 String stringa1 = a1.getContents();
     
                                 double stringa2;
     
                                 if (stringa1.equals("DEF") || stringa1.equals("ABI") || stringa1.equals("ABJ")|| stringa1.equals("AJ")|| stringa1.equals("")){
     
                                     stringa2 = 0;
                                 }else{
                                     if(stringa1.equals("ADM")){
                                         stringa2 = 1;
     
                                     }else{
                                         if(stringa1.endsWith(")") ){
                                             stringa2 = 10;
     
                                         }else{
     
                                     stringa2 = monFormatteurDeNombre.parse(stringa1).doubleValue();
                                         }
                                     }
                                 }     
                                 PersonneDbl[j]=stringa2;
     
                             }
     
                             et=new Etudiant(PersonneStr[0],PersonneStr[1],PersonneDbl[2],PersonneDbl[3],PersonneDbl[4],PersonneDbl[5],PersonneDbl[6],PersonneDbl[7],PersonneDbl[8],PersonneDbl[9],PersonneDbl[10],PersonneDbl[11],PersonneDbl[12],PersonneDbl[13],PersonneDbl[14],PersonneDbl[15],PersonneDbl[16],PersonneDbl[17],PersonneDbl[18],PersonneDbl[19],PersonneDbl[20],PersonneDbl[21],PersonneDbl[22],PersonneDbl[23],PersonneDbl[24],PersonneDbl[25],PersonneDbl[26],PersonneDbl[27],PersonneDbl[28]);
                            // textarea1.setText(textarea1.getText()+"\nnom:"+et.nom+"");
     
                             //System.out.println("nom:"+et.nom+"");
                             lk.add(et);
                         }
                         //fermeture du fichier excel
                         workbook.close();
                         it=lk.iterator();
                         textarea1.setText(textarea1.getText()+"\nNOS ETUDIANTS:\n");
     
     
                         while( it.hasNext() ){
                             etudiant1=(Etudiant)it.next();
                             textarea1.setText(textarea1.getText()+"\n"+etudiant1.nom);
     
     
                         }
                         textarea1.setText(textarea1.getText()+"\n\nETUDIANTS CHARGES!!");
                         avancer(100); 
     
     
     
                         //L' algo du kmeans est a faire ici
                        } catch (BiffException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        } catch (ParseException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
    et celle de avancer(int)

    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
     
    public void avancer(int i) {
     
            if(i==0){
                maBarre.setValue(0);    
            }else{
            if(i==100){
                maBarre.setValue(100);
     
     
            }else{
            if (maBarre.getValue()<100){
                maBarre.setValue(maBarre.getValue()+i);
     
            }
            }
            }
     
        }
    je sais pas si ça aide...

Discussions similaires

  1. empecher la visualisation du code source
    Par Teo dans le forum ASP
    Réponses: 7
    Dernier message: 24/10/2003, 14h11
  2. visualisation et zoom d'une image
    Par julie20 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2003, 03h28
  3. visualiser du javascript sous jbuilder
    Par antigone dans le forum JBuilder
    Réponses: 5
    Dernier message: 26/06/2003, 18h23
  4. XSL pour visualiser arbre XML sous forme de tableau en HTML
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 28/03/2003, 10h55
  5. Visualisation des mise à jour en réseau
    Par fandor7 dans le forum Paradox
    Réponses: 2
    Dernier message: 06/12/2002, 15h54

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