Changer la couleur d’une colonne dans un JTable
JTable est une sous-classe de la classe JComponent pour afficher des structures de données complexes. Un composant JTable peut suivre le modèle de conception Model View Controller (MVC) pour afficher les données dans des lignes et des colonnes. Une JTable peut générer des interfaces TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener, RowSorterListener. Nous pouvons changer la couleur d’arrière-plan et de premier plan pour chaque colonne d’une JTable en personnalisant la classe DefaultTableCellRenderer et elle n’a qu’une seule méthode getTableCellRendererComponent() pour l’implémenter.
Exemple:
import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class JtableColor extends JFrame { private JTable table; private TableColumn col; public JtableColor() { setTitle("Colorer une colonne JTable"); //Header de JTable String[] columns = new String[] { "Id", "Nom", "Adresse", "Taux horaire", }; //données pour JTable dans un tableau 2D Object[][] data = new Object[][] { {1, "Thomas", "Paris", 20.0 }, {2, "Jean", "Marseille", 50.0 }, {3, "Yohan", "Lyon", 30.0, true }, {4, "Emily", "Toulouse", 60.0 }, {5, "Alex", "Nice", 10.0 }, }; //crée un JTable avec des données table = new JTable(data, columns); //récupérer la 2éme colonne col = table.getColumnModel().getColumn(1); //définir le Renderer col.setCellRenderer(new MyRenderer(Color.lightGray, Color.blue)); //ajouter la table au frame add(new JScrollPane(table), BorderLayout.CENTER); setSize(400, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } public static void main(String [] args) { new JtableColor(); } } // Personnalisez le code pour définir la couleur pour chaque colonne de JTable class MyRenderer extends DefaultTableCellRenderer { Color bg, fg; public MyRenderer(Color bg, Color fg) { super(); this.bg = bg; this.fg = fg; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); cell.setBackground(bg); cell.setForeground(fg); return cell; } }
Sortie: