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 99 100 101 102
| import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
public class CoderProgressBarre extends JDialog implements Runnable//donc ce sera un Thread
{
public JProgressBar progress;
private int value;
public static int diviseur;
public boolean workDone = false;
private JFrame ihm;
public CoderProgressBarre (JFrame parent,int yPos, int xPos)
{
super (parent,"Veuillez patienter...",false);
ihm = (JFrame) parent;
int x = ihm.getX();
int y = ihm.getY();
this.value = 0;
this.progress = new JProgressBar (0, 100);
this.progress.setStringPainted (true);
this.progress.setString("Travail en cours...");
this.getContentPane ().add (this.progress);
this.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);
this.setLocation (x+190, y+210);
this.setSize(250,50);
this.setResizable(false);
this.setVisible (true);
this.lanceLongTraitement();
}
// cree un nouveau Thread et appelle la methode start
// Cf une documentation sur les Thread si vous ne comprennez pas le
// mecanisme ....
public void lanceLongTraitement ()
{
Thread t = new Thread (this);
t.start ();
// maintenant nous rendons la main au processus d'evenement
}
// methode de l'interface Runnable
// lance un nouveau thread qui va executer le code de la methode longTraitement
public void run ()
{
this.longTraitement ();
}
public void longTraitement ()
{ // execute la succession d'operation ...
// on est plus dans le processus d'evenement mais dans le nouveau Thread
//traitement long, lié à l'affichage de la progressBar dans lequel tu appelles la methode MaprogressBar.majProgress() a chaque étape de ton traitement
}
catch (IOException e)
{
JOptionPane.showConfirmDialog(ihm,"Problème rencontré au chiffrement du message","Erreur CoderProgressBarre 5.32X",JOptionPane.OK_CANCEL_OPTION,JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
this.dispose();
}
// methode qui met a jour la JProgressBar par le processus d'evenement
// Pourquoi obliger l'execution de cette methode par le processus d'evenement ?
// -> Cf : la docs du tutoriel de Sun section : "Threads and Swing"
// http://java.sun.com/docs/books/tutorial/uiswing/mini/threads.html
public void majProgress ()
{ if ( SwingUtilities.isEventDispatchThread () )
{
value = value+1;
progress.setValue (value);
}
else
{ Runnable callMAJ = new Runnable ()
{ public void run ()
{ majProgress ();
}
};
SwingUtilities.invokeLater (callMAJ);
}
}
} |
Partager