Salut,
Le modèle définit les données de la JTable : les informations sont indexées par lignes et colonnes dans ce modèle.
La JTable affiche une version transformée du modèle. Tranformée par les filtres, les tris, etc.
Ainsi, tu peux avoir 3 lignes dans le modèle :
|
Colonne 0 |
Colonne 1 |
Ligne 0 |
A |
B |
Ligne 1 |
C |
D |
Ligne 2 |
E |
F |
et ta table affiche ces données de manière complètement différente :
|
Colonne 0 |
Colonne 1 |
Ligne 0 |
F |
E |
Ligne 1 |
B |
A |
La ligne 0 dans la table correspond à la ligne 2 dans le modèle. La colonne 0 dans la table correspond à la colonne 1 dans le modèle.
Tu ne peux donc pas prendre des index relatifs à la table pour accéder aux données correspondantes dans le modèle. L'index de ligne sélectionnée dans la table en fait partie.
Pour gérer ça tu as quatre méthodes dans la classe JTable :
- convertRowIndexToView
- convertRowIndexToModel
- convertColumnIndexToView
- convertColumnIndexToModel
Ces méthodes permettent de convertir un index d'un contexte vers l'autre. Celles qui contiennent "RowIndex" servent à convert l'index de ligne, et celles qui contiennent "ColumnIndex", l'index de colonne. Celles qui contiennent "toView" permettent une conversion du contexte "modèle" vers le contexte "vue", donc JTable, et celles qui contiennent "toModel" permettent une conversion du context "vue" (donc JTable) vers le contexte "modèle".
Avec l'exemple que je t'ai montré ci-dessus :
1 2 3
| int tableIndex=0;
int modelIndex = table.convertRowIndexToModel(tableIndex);
System.out.println(modelIndex); |
va afficher 2.
Tu peux également accéder directement aux données via l'instance de JTable, par les index de vue. Le nom des méthodes sont les mêmes.
Ainsi correspond à
table.getModel().getValueAt(2,1);
Partager