Bonjour à tous,

Je souhaite colorier les cellules d'une JTable, à partir des infos contenus dans son dataModel, un AbstractTableModel perso qui associe à chaque cellule, un HiddenObject (différent de la valeur visible).

J'ai donc créé un TableCellRenderer étendant le DefaultTableCellRenderer (rien de bien spécial).
J'ai surchargé la methode getTableCellRendererComponent comme suit :
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
 
@Override
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);
 
	Object obj = ((PersoTableModel)table.getModel()).getObjectAt(row, column);	// methode retournant l'objet masqué du modèle
	if (obj instanceof HiddenObject)
	{
		HiddenObject o = (HiddenObject)obj;
		if (o.isUserCreated()) // champs specifique à tester
		{
			//Modification de couleur
			cell.setBackground(Color.orange);
		}
		else
		{
			//On ne fait rien, le défaut est OK
		}
	}
	else
	{
		//On ne fait rien, le défaut est OK
	}
	return cell;
}

A l'éxécution, le résultat est assez surprenant : Dès qu'une cellule de la colonne répond vrai à "o.isUserCreated()", toutes les cellules suivantes sont colorées en orange !
Un click sur le tableau, provoquant un rafraichissement, et l'ensemble des colonnes sont orange (y compris celles qui n'étaient pas colorée avant).

Utilisant Nimbus, je m'attendais à avoir une alternance classique bleu foncé/bleu clair, sauf sur certaines cellules qui seraient orangées.
La même utilisation de nimbus m'empêche de mettre une couleur par défaut systèmatiquement, sans la réponse de l'ancêtre (sauf à refaire son boulot...).

Du coup, j'ai rajouté des traces, et je constate bien que le super.getTableCellRendererComponent(...) retourne une cellule avec un Background orange, ce qui m'étonne (et au vu de l'objet masqué, ne devrait pas être le cas !).

Quelqu'un a-t-il déjà rencontré ce problème et aurait un workaround ?


Merci d'avoir lu jusque là !

Manu