Jprogressbar simple d'utilisation.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 143 fois - Téléchargée 25 fois

Contenu du snippet

Ce code permet à l'origine d'indiquer à l'utilisateur l'avancement de l'application
dans le filtrage de données ligne par ligne sur de gros fichier.
Il marche comme sur des roulettes :P

Vous avez d'abord la classe de la jProgressBar.
Ensuite j'ai mis le code pour faire appel à une instance de celle ci.
Pour l'utiliser il suffit ensuite d'utiliser la methode setValeur(maValeur) dans l'application
principale.

Pour ceux qui ont besoin de plus d'explications:

Une JProgressBar est contenu dans un processus "independant" qui surveille le processus principal.
Ces processus independants (threads) permettent d'effectuer plusieurs taches en même temps.
Renseignez-vous sur les threads si vous ne les connaissez pas! c'est très utile lorsque que l'on commence
à faire des programmes plus évolués.

Ensuite, pour faire fonctionner ma JprogressBar, il suffit de connaitre le nombre de lignes du fichier (qui sera le maximum de la barre).
A chaque ligne traitée (ou groupe de lignes), il faut avertir ma barre de progression grâçe à la methode setValeur(int) avec en paramètre le
numero de la ligne courante.
La fenêtre se mettra alors à jour.

Voila, bon courage!

Source / Exemple :


import java.awt.*;
import javax.swing.*;
/**

  • Une barre de progression qui est mis à jour par le thread
  • principale
  • @author Guillaume DAVID
*
  • /
public class JProgressBarTest { /* Numero de serialisation par defaut. */ private static final long serialVersionUID = 1L; /* JProgressBarTest est un singleton qui peut être appelé par
  • differentes classes.
  • /
private static JProgressBarTest instance=null; /* La barre de progression. */ private static JProgressBar maBarre; /* La valeur maximal de la JProgressBar.
  • Ici, je lis un fichier et donc j'utilise le
  • numeros de la lignes comme repère de
  • progression.
  • /
private static int ligne; /* Le texte informatif. */ private static JLabel texte; /* La fênetre principale. */ private static JFrame cadre; /**
  • Le constructeur de la classe.
  • @param preface String permettant de placer un cours texte
  • de description de l'action en cours.
  • par exemple: "Lecture du fichier: "
  • @param string Indique l'element lié à la JProgressBar.
  • @param nbLigne Indique la valeur maximal de la JProgressBar.
  • /
private JProgressBarTest(String preface, String string, int nbLigne) { /* Je recuper le nom du fichier dans le chemin fournit
  • en paramêtre. S'il est trop long, Je le raccourçi et
  • j'ajoute "..."
  • /
string=string.substring(string.lastIndexOf("\\")+1); if(string.length()>15) string=string.substring(0,15)+"..."; ligne=nbLigne; /* Creation de la fenêtre. */ cadre = new JFrame("En cours de chargement"); JPanel panneau = new JPanel(); texte = new JLabel(preface+string); maBarre = new JProgressBar(0, 100); panneau.add("Center", maBarre); panneau.add("Center", texte); cadre.getContentPane().add(BorderLayout.CENTER, panneau); cadre.setSize(275,85); cadre.setResizable(false); /** Lecture de la taille de l'écran */ /* Je centre ma fenêtre au milieu. */ java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); cadre.setLocation( (screenSize.width-cadre.getWidth())/2, (screenSize.height-cadre.getHeight())/2 ); cadre.setVisible(true); } /**
  • Methode permettant de mettre à jour la barre de progression
  • @param compteur La valeur de la barre.
  • /
public void setValeur(int compteur) { int val=(int)compteur*100/ligne; maBarre.setValue(val); } /**
  • Création/recuperation de l'instance unique.
  • @param preface String permettant de placer un cours texte
  • de description de l'action en cours.
  • par exemple: "Lecture du fichier: "
  • @param string Indique l'element lié à la JProgressBar.
  • @param nbLigne Indique la valeur maximal de la JProgressBar.
  • @return l'instance de la JProgressBar.
  • /
public static JProgressBarTest getInstance(String preface, String string, int nbLigne) { if(instance==null) instance=new JProgressBarTest(preface, string, nbLigne); else { /*
  • Mise à jour des valeurs lors d'un nouvel appel.
  • Par exemple:
  • premier appel:" Chargement du fichier: test.txt.
  • second appel:" Chargement du fichier: test2.txt.
  • /
string=string.substring(string.lastIndexOf("\\")+1); if(string.length()>15) string=string.substring(0,15)+"..."; texte.setText(preface+string); maBarre.setValue(0); ligne=nbLigne; cadre.setVisible(true); } return instance; } /**
  • Mise à jour de la barre de progression afin de
  • la remplir.
  • Attente très courte pour laisser le temps à l'utilisateur
  • de voir que le chargement à bien été effectué.
  • Suppression de la fenêtre.
  • /
public void dispose() { maBarre.setValue(100); Object o=new Object(); try { synchronized(o) { o.wait(200); } } catch(InterruptedException ex) { } cadre.dispose(); } } // Pour tester le code: public class main { /**
  • @param args
  • /
private static JProgressBarTest barTest=null; public static void main(String[] args) { new Thread(new Runnable() { public void run() { barTest=JProgressBarTest.getInstance("Analyse du fichier ","fic",100000); } }).start(); int compteur=0; // Et pour l'utiliser: for(int i=0;i<=100000;i++) { if(barTest!=null) barTest.addLigne(i); System.out.println(i); } } }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
20
Date d'inscription
vendredi 23 septembre 2005
Statut
Membre
Dernière intervention
10 juin 2010

Ton code est pas mal mais j'aurai aimé savoir si tu savais faire ça sans connaitre à priori le nombre de lignes du fichier à lire?
Merci
Messages postés
4
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
27 juillet 2008

Bonsoir, juste une petite modif pour que ça fonctionne correctement, au niveau de la methode main, il faut remplacer la ligne Test.addLigne(i); par barTest.setValeur(i); j'espere que cela vous sera utile. A+
Messages postés
51
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
16 juin 2008

voila c'est un peu modifié pour que l'exemple marche directement
Messages postés
2
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
30 avril 2008

salut ,

je ne sais pas pourquoi le cas d'utilisation ce ne marche pas c'est à dire que cette ligne est incorrecte "barTest.addLigne(compteur);"
je n'arrive pas à l'utiliser
Messages postés
2
Date d'inscription
vendredi 8 décembre 2006
Statut
Membre
Dernière intervention
1 janvier 2007

Bonjours
dsl , je debute en JAVA et
jé telechargé ce code mé en fét J2 PA Compris
Comment CA Marche ..
BEsoin De pLUS D'EXPLI
TKS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.