Changer la largeur des colonnes dans une JTable en Java

Lorsque vous travaillez avec JTable dans Swing, nous avons parfois besoin que la table ait des colonnes de différentes largeurs, autres que les valeurs par défaut fournies par le composant JTable.

Regardons un exemple d’un programme Swing, comment modifier la valeur par défaut de la largeur des colonnes dans une JTable :


 
 

Définir la largeur de colonne dans une JTable

Cela peut être fait facilement en utilisant la méthode setPreferredWidth() de la classe TableColumnModel. Par exemple, l’instruction suivante définit la largeur de la colonne 1 sur 20 pixels:

TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(20);

Sortie:


 
Pourtant, la définition de la largeur préférée pour une seule colonne ne fonctionne pas. Le tableau doit connaître la largeur préférée de toutes les colonnes, ainsi les instructions suivantes définissent la largeur préférée pour les 5 colonnes du tableau:

TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(20);
columnModel.getColumn(1).setPreferredWidth(40);
columnModel.getColumn(2).setPreferredWidth(40);
columnModel.getColumn(3).setPreferredWidth(100);
columnModel.getColumn(4).setPreferredWidth(100);

Sortie:

REMARQUE: il est recommandé de définir la largeur préférée de toutes les colonnes de manière à ce que la largeur totale soit approximativement égale à la largeur préférée de la table (ou d’un JScrollPane car un JTable est généralement placé à l’intérieur d’un JScrollPane). Par exemple, les instructions suivantes définissent la taille préférée pour JScrollPane:

JScrollPane sp = new JScrollPane(table);
sp.setPreferredSize(new Dimension(300, 250));

 
 

Exemple Complet:
import javax.swing.*;
import java.awt.*;
import javax.swing.table.TableColumnModel;
 
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);

        TableColumnModel columnModel = table.getColumnModel();
        columnModel.getColumn(0).setPreferredWidth(20);
        columnModel.getColumn(1).setPreferredWidth(40);
        columnModel.getColumn(2).setPreferredWidth(40);
        columnModel.getColumn(3).setPreferredWidth(100);
        columnModel.getColumn(4).setPreferredWidth(100);
		
        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, 180);
        frame.setVisible(true);
    }
}

Sortie:

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *