Jprogressbar simple d'utilisation.

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

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.