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:


 

Laisser un commentaire

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