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:
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: