hello,
j'ai un souci pour mettre à jour une progressbar pendant un traitement long. J'ai essayé d'implémenter swingworker, j'ai l'impression d'avoir fait ce qu'il faut mais... ça ne marche pas ! Le traitement s'exécute, mais la barre n'est mise à jour qu'à la fin.
Voilà quelques bouts de code :
le swingworker :
L'appel (situé dans un actionperformed d'un actionlistener):
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 public class CalculerDelaunay extends SwingWorker<Set<Triangle>, Integer>{ private List<Pnt> sommets ; public CalculerDelaunay(List<Pnt> sommets) { this.sommets = sommets; } @Override protected Set<Triangle> doInBackground() { Triangulation t = new Triangulation(sommets); int i = 0 ; for (Pnt point : sommets ){ t.delaunayPlace(point); setProgress((int) 100 *i/sommets.size()); System.out.println((int) 100 *i/sommets.size()+1); i++; } return t.getListeTriangle().nodeSet() ; } protected void done() { setProgress(100); } }
et mon listener :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CalculerDelaunay calc = new CalculerDelaunay(sommets); calc.addPropertyChangeListener(new PropertyChangeProgressBar(fenetre.getProgressBar())); calc.execute();
Je ne vois pas bien d'où vient le problème... j'ai mis un syso dans mon listener, et il n'est appelé qu'à la fin !
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 public class PropertyChangeProgressBar implements PropertyChangeListener { private JProgressBar progressBar ; private PropertyChangeProgressBar(){ } public PropertyChangeProgressBar(JProgressBar pB){ progressBar = pB ; progressBar.setValue(0); } @Override public void propertyChange(PropertyChangeEvent evt) { String strPropertyName = evt.getPropertyName(); System.out.println(strPropertyName); if ("progress".equals(strPropertyName)) { progressBar.setIndeterminate(false); int progress = (Integer)evt.getNewValue(); progressBar.setValue(progress); } } }
Quelqu'un a t'il une idée ? S'il faut que je place plus de code, pas de problème.







Répondre avec citation








Partager