Bonjour,

Je cherche à colorer les entêtes de colonnes de ma JTable.

Les entêtes de ma JTable sont multilignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
MultiLineHeaderRenderer renderer = new MultiLineHeaderRenderer();
Enumeration<TableColumn> e = m_table.getColumnModel().getColumns();
 
while (e.hasMoreElements())
{
     ((TableColumn) e.nextElement()).setHeaderRenderer(renderer);
}
Voici le code de "MultiLineHeaderRenderer"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
class MultiLineHeaderRenderer extends JList implements TableCellRenderer 
{
     private static final long serialVersionUID = 1L;
 
     public MultiLineHeaderRenderer() 
     {
	setOpaque(false); // Car on va dessiner le fond nous même
 
	setBorder(BorderFactory.createEtchedBorder());
 
	ListCellRenderer renderer = getCellRenderer();
	((JLabel) renderer).setHorizontalAlignment(JLabel.CENTER);
	setCellRenderer(renderer);
     }
 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
     {
          setFont(table.getFont());
          String str = (value == null) ? "" : value.toString();
          BufferedReader br = new BufferedReader(new StringReader(str));
          String ligne;
          Vector<String> vListe = new Vector<String>();
          try 
          {
               while ((ligne = br.readLine()) != null) 
               {
                    vListe.addElement(ligne);
               }
          } 
          catch (Exception ex) 
          {
               ex.printStackTrace();
          }
          setListData(vListe);
          return this;
     }
 
     @Override
     protected void paintComponent(Graphics g) 
     {
          Graphics2D g2d = (Graphics2D) g;
          GradientPaint gp = new GradientPaint(0, 0,Color.white, 0, getHeight(), Color.green);
          g2d.setPaint(gp); 
          g2d.fillRect(0, 0, getWidth(), getHeight()); 
          super.paintComponent(g);
     }
}
Avec le code écrit ainsi, mes entête restent de la couleur de base (gris).

Si j'enlève le "super.paintComponent(g);" de la méthode "protected void paintComponent(Graphics g)", le dégradé fonctionne correctement sur les entêtes, mais je n'ai plus le texte des entêtes.

Merci de vos conseils