Comment afficher des données dans JTable?

Dans ce tutoriel nous allons découvrir comment afficher des données dans JTable. Le composant JTable fourni dans l’API Swing de Java est utilisé pour afficher / modifier des données bidimensionnelles. Ceci est équivalent à une feuille de calcul.

JTable fournit des fonctionnalités riches pour gérer l’apparence et le comportement du composant de JTable. JTable hérite directement de JComponent et implémente plusieurs interfaces listener telles que TableModelListener, TableColumnModelListener, ListSelectionListener… etc.

Chaque JTable a trois modèles TableModelTableColumnModel et ListSelectionModel.

  • TableModel est utilisé pour spécifier la façon dont les données de la table sont stockées et la récupération de ces données. Les données de JTable sont souvent dans une structure à deux dimensions, comme un tableau à deux dimensions ou un vecteur de vecteurs. TableModel est également utilisé pour spécifier comment les données peuvent être modifiables dans le tableau.
  • TableColumnModel est utilisé pour gérer tous les TableColumn en termes de sélection de colonne, l’ordre des colonnes et la taille de la marge.
  • ListSelectionModel permet à la table d’avoir différents modes de sélection tels que des sélections par intervalle et intervalle multiple.

 
Nous pouvons créer un JTable en utilisant ses constructeurs comme suit:

Constructeurs JTable Description
JTable() Créer une table vide
JTable(int rows, int columns) Créez une table avec des cellules et des lignes vides.
JTable(Object[][] data, Object[] heading) Créer une table avec des données spécifiées dans un tableau à deux dimensions et un tableau d’en-tête.
JTable(TableModel dm) Créer une table avec un TableModel donné.
JTable(TableModel dm, TableColumnModel cm) Créez une table avec un TableModel et TableColumnModel donnés.
JTable(TableModel dm,TableColumnModel cm, ListSelectionModel sm) Créez une table avec un TableModel, TableColumnModel et ListSelectionModel donné.
JTable(Vector data, Vector heading) Créez une table avec des données du vecteur et un vecteur d’en-têtes.

Exemple:
Prenons quelques exemples. Supposons que vous souhaitiez afficher une liste des employés appartenant à une organisation. Cela devrait afficher les différents attributs des employés. Par exemple, l’ID de l’employé, le nom, l’adresse, le taux horaire, etc. L’affichage ressemblera davantage à une table de base de données affichant des lignes et des colonnes. Dans ce cas, l’id, le nom, l’adresse, le taux horaire sont des colonnes. Le nombre de lignes peut différer en fonction du nombre d’employés dans l’organisation.

Regardons comment afficher de telles données avec JTable avec un minimum de code. L’idée est d’afficher uniquement les détails dans le tableau. L’utilisateur ne doit pas être autorisé à modifier des données.

import javax.swing.*;
import java.awt.*;
 
public class Main {
 
    public static void main(String[] args) {
        //crée un frame
        final JFrame frame = new JFrame("Exemple de JTable");
 
        //En-têtes pour JTable 
        String[] columns = new String[] {
            "Id", "Nom", "Adresse", "Taux horaire", "A temps partiel"
        };
         
        //données pour JTable dans un tableau 2D
        Object[][] data = new Object[][] {
            {1, "Thomas", "Paris", 20.0, true },
            {2, "Jean", "Marseille", 50.0, false },
            {3, "Yohan", "Lyon", 30.0, true },
            {4, "Emily", "Toulouse", 60.0, false },
            {5, "Alex", "Nice", 10.0, false },
        };
 
        //crée un JTable avec des données
        JTable table = new JTable(data, columns);
    
        JScrollPane scroll = new JScrollPane(table);
        table.setFillsViewportHeight(true);
 
        JLabel labelHead = new JLabel("Liste des employes");
        labelHead.setFont(new Font("Arial",Font.TRUETYPE_FONT,20));
 
        frame.getContentPane().add(labelHead,BorderLayout.PAGE_START);
        //ajouter la table au frame
        frame.getContentPane().add(scroll,BorderLayout.CENTER);
 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 200);
        frame.setVisible(true);
    }
}