Bonjour à tous,
J'ai une table avec une colonne Montant(Montant de chaque lignes).
J'aimerai obtenir la somme de la colonne Montant dans un Jlabel à l'exterieur de la Jtable.
Est ce possible?
Faut il utiliser un renderer?
Qu'en pensez vous?
Bonjour à tous,
J'ai une table avec une colonne Montant(Montant de chaque lignes).
J'aimerai obtenir la somme de la colonne Montant dans un Jlabel à l'exterieur de la Jtable.
Est ce possible?
Faut il utiliser un renderer?
Qu'en pensez vous?
il n'y a pas de problème particulier à le faire. Quel est le problème ?
D'accord, il faut donc utiliser un renderer?
Comment faire?
Merci![]()
a) ta table doit probablement se trouver dans un panel
b) tu ajoute un label dans ce panel
c) tu ajoute une méthode à ton model qui te renvoi la somme que tu passe à ton label
d) le panel est surement dans une fenetre qui te sert de controleur. à lui de déclencher les méthodes de mise à jour.
Montre ton code, car au vu de ton énoncé : ce que tu dis ne doit peut-être pas correspondre à ce que tu code.![]()
Si ton JLabel est en dehors de la JTable, un Renderer ne servira strictement à rien.
Dans ce cas la façon de faire est de mettre dans le JLabel la somme des valeurs obtenues par une boucle sur le modèle de la JTable.
Il faut également prendre en compte les changements qui pourraient survenir. Donc dans ce cas il faut utiliser un TableModelListener pour maintenir le Jlabel à jour.
Par exemple
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package lists; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; public class Fragment { private JTable myTable; private JLabel label; private static final int MY_COLUMN = 2; public Fragment() { myTable = new JTable(); label = new JLabel(); initializeLabel(); } private void initializeLabel() { if (myTable != null) { myTable.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { if (e.getColumn() == MY_COLUMN) { label.setText(String.valueOf(calculateMyColumnTotal())); } } }); label.setText(String.valueOf(calculateMyColumnTotal())); } } private double calculateMyColumnTotal() { TableModel model = myTable.getModel(); double total = 0; for (int i = 0; i < model.getRowCount(); i++) { total += (Double) model.getValueAt(i, MY_COLUMN); } return total; } }
Merci Sinok
Je me doutais qu'il fallait mettre un tableChanged, mais je ne savais pas comment l'intégrer.
Je ne savais pas qu'il existait un écouteur sur le Jtable: .addTableModelListener
J'essaierais dès que j'ai un peu de temps libre.
Encore Merci
Partager