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:


 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *