Créer une JTable avec le modèle AbstractTableModel
Chaque JTable a un modèle associé avec. Vous pouvez ne pas le réaliser mais il est créé par défaut au moment de la création du tableau à deux dimension:Object[][] data = {{1,2,3},{2,3,4},{4,5,6},{7,8,9}}; String[] titre= {"Colonne1", "Colonne2", "Colonne3"}; JTable exempleJTable = new JTable (data, nomColonne)}; |
Heureusement, Vous pouvez utiliser l'objet JTable sans passer par le modèle de la table. Par exemple, pour connaitre la méthode de la cellule (2, 3), utilisez la méthode getValueAt:
System.out.println(exempleJTable.getValueAt(2, 2)); |
TableModel parDefaut = exempleJTable.getModel(); System.out.println(exempleJTable.getValueAt(2, 2).toString()); |
Il existe deux classes qui implémentent l'interface TableModel, DefaultTableModel et AbstractTableModel.
- AbstractTableModel implémente la majorité des méthodes de TableModel.
- DefaultTableModel est une sous classe de AbstractTableModel avec trois méthodes implémentées dont les données sont stockées dans un tableau de tableau.
- public int getRowCount(): renvoie le nombre de lignes.
- public int getColumnCount(): renvoie le nombre de colonnes.
- public Object getValueAt(int ligne, int colonne): retourne l'objet dans la case (ligne, colonne).
L'utilisation de AbstractTableModel donne la possibilité de stocker les données librement mais vous devez implémenter les méthodes qui permettent l'interaction avec JTable. Le nombre de méthodes implémentées dépend de la façon de la gestion des données. Pour lire, seulement les 3 méthodes mentionnées sont suffisantes, mais pour modifier (ajouter, supprimer une ligne ou colonne ), il faut implémenter d'autres méthodes pour modifier les données qui sont stockées dans un modèle de la table.
Création d'un modèle de table
class Modele extends AbstractTableModel{Ce code associe le modèle à la table
private Object[][] data;
private String[] title;
public Modele(Object[][] data, String[] title){
this.data = data;
this.title = title;
}
/**
* Retourne le titre de la colonne et l'indice
*/
public String getColumnName(int col) {
return this.title[col];
}
/**
* Retourne le nombre de colonnes
*/
public int getColumnCount() {
return this.title.length;
}
/**
* Retourne le nombre de lignes
*/
public int getRowCount() {
return this.data.length;
}
/**
* Retourne l'objet à l'intersection de ligne et colonne
*/
public Object getValueAt(int row, int col) {
return this.data[row][col];
}
/**
* Modifier l'objet à l'intersection de ligne et colonne
*/
public void setValueAt(Object value, int row, int col) {
this.data[row][col] = value;
}
}
//Création de l'objet JTable JTable table = new JTable(); //Création du modèle Modele modele =new Modele(data, titre); //Relier le modèle à JTable table.setModel(modele); |