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: