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));
L'objet JTable crée un DefaultTableModel parce qu'il contrôle comment les données dans la table sont affichées et laisse la gestion des données au modèle de la table. Si le modèle n'est pas définie par l'utilisateur, dans ce cas un DefaultTableModel est utilisé. Vous pouvez vérifié que cela est vrai en consultant le modèle à partir du modèle de JTable.

TableModel parDefaut = exempleJTable.getModel();
System.out.println(exempleJTable.getValueAt(2, 2).toString());
L'interface TableModel définit comment les données peuvent interagirent avec JTable. Cela permet une création et utilisation de la table dans Java plus facile. Une fois le modèle de la table est associé avec JTable vous ne devez pas à vous soucier comment JTable accede aux données. Tout ce que vous avez à vous soucier est de créer un modèle et l'utiliser.

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).
Le choix entre l'utilisation de AbstractTableModel ou DefaultTableModel est relié au données. DefaultTableModel utilise la structure Vector. Cette implémentation est supportée par Java et d'un point de vue programmation aussi. La grande partie est faites pour vous, il vous reste de savoir si cette implémentation cause un problème pour votre application.

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{
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;
}
}
Ce code associe le modèle à la table
//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);