Bonjour,
j'ai une interface avec une JTable qui affiche les valeurs de variables modifiées par des processus.J'aimerai que les cellules de la JTable soient modifiées à chaque fois que le processus change une valeur. voila comment je m'y prends pour faire ceci
Une des actions dans la classe du processus qui modifie un compteur :
la classe Evenement qui récupère le signal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 private void inc_compteur() { o.attente(id); System.out.println("T" + o.temps++ + " => Processus " + id + " incrémente son compteur."); compteur++; e.modifCompteurPrive(id,compteur); //e est un evenement o.bloquer(); }
la méthode setValueAt de la classe TableModelStat
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
26
27 public class Evenements { StatistiquesPanel panel; public Evenements(StatistiquesPanel statPan){ this.panel = statPan; } //les actions atomiques qui doivent entrainer une modification public void modifCompteurPrive(int tache, int compt){ panel.model.setValueAt(Integer.toString(compt),tache,2); } public void demandeMutex(int tache){ panel.model.setValueAt("Demande MUTEX",tache,1); } public void modifCompteurPartage(int tache, int compt){ panel.model.setValueAt(Integer.toString(compt),tache,3); } public void rendreMutex(int tache){ panel.model.setValueAt("Rend MUTEX",tache,1); } }
Le problème est que la JTable n'est modifiée qu'à la fin de l'execution (affiche la valeur final du compteur) alors qu'elle devrait afficher les valeurs successives du compteur.A noter que ce n'est pas du au fait que les processus s'executent trop vite car je peux régler les temporisations.Les sorties consoles (System.out.println) fonctionnent très bien, ils affichent bien les valeurs successives.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void setValueAt(Object value, int rowIndex, int columnIndex){ String[] item; if (rowIndex >= items.size()) { item = new String[getColumnCount()]; items.add(item); } else { item = (String[]) items.get(rowIndex); } item[columnIndex] = value.toString(); fireTableCellUpdated(rowIndex >= items.size() ? items.size() - 1 : rowIndex, columnIndex); }
Avez vous une idée?
merci d'avance
Partager