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:


