JTable avec un header de type JLabel
JTable est un composant Swing flexible, est une sous-classe de la classe JComponent et elle peut être utilisée pour créer une table avec des informations affichées dans plusieurs lignes et colonnes. Nous pouvons créer un JTable avec un header de type JLabel en personnalisant le code en implémentant l’interface TableCellRenderer et nous devons redéfinir la méthode getTableCellRendererComponent().

Exemple:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class Main
{
public static void main(String args[])
{
//Header de JTable
String columns[] = { "Français", "Anglais" };
//données pour JTable dans un tableau 2D
Object data[][] = {
{ "Lumière", "Light" },
{ "Cheval", "Horse" },
{ "Chien", "Dog" },
{ "Oiseau", "Bird" },
{ "Soleil", "Sun" },
{ "Neige", "Snow" },
{ "Porte", "Door" },
{ "Voiture", "Car" },
{ "Ville", "City" },
{ "Bateau", "Boat" },
{ "Avion", "Plane" }
};
//crée un frame
JFrame f = new JFrame("JLabel dans JTable");
//crée un JTable avec des données
JTable table = new JTable(data, columns);
JScrollPane scroll = new JScrollPane(table);
//crée deux icones
ImageIcon icon1 = new ImageIcon("icon1.png");
ImageIcon icon2 = new ImageIcon("icon2.png");
//crée une bordure
Border headerBorder = UIManager.getBorder("TableHeader.cellBorder");
//crée deux étiquettes avec une bordure
JLabel label1 = new JLabel(columns[0], icon1, JLabel.CENTER);
label1.setBorder(headerBorder);
JLabel label2 = new JLabel(columns[1], icon2, JLabel.CENTER);
label2.setBorder(headerBorder);
//définir le renderer
TableCellRenderer renderer = new JTableCellRenderer();
//définir le modéle de colonne
TableColumnModel model = table.getColumnModel();
//récupérer les deux colonnes
TableColumn col0 = model.getColumn(0);
TableColumn col1 = model.getColumn(1);
col0.setHeaderRenderer(renderer);
col0.setHeaderValue(label1);
col1.setHeaderRenderer(renderer);
col1.setHeaderValue(label2);
f.getContentPane().add(scroll, BorderLayout.CENTER);
f.setSize(300, 300);
f.setVisible(true);
}
}
//classe du renderer
class JTableCellRenderer implements TableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object
value, boolean isSelected, boolean hasFocus, int row, int column)
{
return (JComponent)value;
}
}
Sortie:


