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
|
public abstract class ActionLongue implements Runnable {
private JProgressBar barreProgression;
public ActionLongue(JProgressBar barre) {
barreProgression = barre;
}
final public void run() {
initThread();
execute();
terminateThread();
}
/**
* A implémenter dans la classe fille
* Retourne vrai si on veut une barre de progression
* inderterminée, faux sinon.
* @return
*/
protected abstract boolean isInderterminate();
/**
* A implémenter dans la classe fille
* Le code de cette méthode s'exécutera dans un nouveau thread
*
*/
protected abstract void execute();
/**
* Méthode s'exécutant dans l'EDT
* pour mettre à jour des objets graphiques
* à la fin du thread.
* A implémenter si besoin.
*
*/
protected void postExecute() {
}
/**
* Méthode appellée automatiquement pour
* initialiser la barre de progression
*
*/
final private void initThread() {
Runnable tache = new Runnable() {
public void run() {
if (isInderterminate()) {
barreProgression.setIndeterminate(true);
} else {
barreProgression.setIndeterminate(false);
barreProgression.setStringPainted(true);
barreProgression.setValue(0);
}
}
};
SwingUtilities.invokeLater(tache);
}
/**
* Méthode appellée automatiquement
* pour réinitialiser la barre de progression
* en fin de traitement
*
*/
final private void terminateThread() {
Runnable tache = new Runnable() {
public void run() {
postExecute();
if (isInderterminate()) {
barreProgression.setIndeterminate(false);
} else {
barreProgression.setStringPainted(false);
barreProgression.setValue(0);
}
}
};
SwingUtilities.invokeLater(tache);
}
} |
Partager