Bonjour,

J'ai recherché pour savoir la manière dont il fallait procédé pour obtenir un JTable (JXTable pour être précis) avec des lignes de couleurs différente si elles sont éditable ou non. J'ai trouvé une solution qui semblerait être la bonne, seulement cela ne marche pas...

J'ai créé un TableCellRenderer et surchargé la méthode getTableCellRendererComponent(), et ensuite affecté mon modèle à mon tableau, voici le code :

TableCellRenderer :
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
public class MyTableCellRenderer extends DefaultTableCellRenderer {
 
    /**
     * Numéro de version pour sérialisation
     */
    private static final long serialVersionUID = -6792822905989381648L;
 
    /* 
     * (non-Javadoc)
     * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
     */
    @Override
    public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int ligne, int colonne) {
	Component composant =  super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, ligne, colonne);
	System.out.println("buh");
 
	if (!isSelected && !hasFocus) {
	    if (((MyTableModel) table.getModel()).isCellEditable(ligne, colonne)) {
		composant.setBackground(Color.LIGHT_GRAY);
	    } else {
		composant.setBackground(Color.WHITE);
	    }
	}
	return composant;
    }
}
L'affectation du modèle au tableau :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
tableau.setDefaultRenderer(Component.class, new MyTableCellRenderer());
En théorie ça devrait marché, mais il ne même pas dans la méthode getTableCellRendererComponent()...

Donc la question que je me pose : Qu'est ce que j'ai mal fait ?
Sinon, il y a pas mal de propriétés définies sur mon tableau, il y a des propriétés qui peuvent définir cette action à la place de mon TableCellRenderer ?