Bonjour,

J'ai une question concernant les Jtable.
j'ai une JTable composée de trois colonnes.
La première ne contient rien (je souhaite seulement changer sa couleur de fond selon les actions utilisateur).
La deuxième correspond à des String
La dernière à des JButton.

Je définis du coup un renderer pour l'affichage :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 public class TableRenderer extends DefaultTableCellRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    	Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, hasFocus, column);
    	if (column == 0) {
    		cell.setBackground(Color.BLACK);
    		return cell;
      }
      if (column == 2) return (JButton) value;
      else return this;
    }
  }

Voici le modèle de la JTable :

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
 
 
 class MyModel extends AbstractTableModel {
 
  private final List<String> names= new ArrayList<String>();
 
@Override
    public Object getValueAt(int row, int column) {
      if (columnIndex == 0) return "";
      else if (columnIndex == 2) return new JButton("name");
      else return names.get(row);
    }
 
    @Override
    public int getRowCount() {
      return names.size());
    }
 
    @Override
    public int getColumnCount() {
      return columnName.length;
    }
 
    @Override
    public String getColumnName(int column) {
      return columnName[column];
    }
 
    @Override
    public Class<?> getColumnClass(int column) {
      else if (column == 2) return JButton.class;
      else return String.class;
    }
 
    @Override
    public boolean isCellEditable(int row, int column) {
      return false;
    }
}
Ensuite j'applique le renderer avec l'instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
setDefaultRenderer(Object.class, new TableRenderer());
La couleur de fond est appliquée même sur la deuxième colonne. Je ne vois pas où il y a l'erreur...

Merci d'avance de votre aide