Changer la couleur d'une cellule d'une JTable

Fermé
Elyes - 13 mars 2008 à 11:53
 Seb - 5 mai 2010 à 10:26
Bonjour,

J'essaye de changer la couleur d'une cellule spécifique dans une JTable, le problème étant qu'après avoir changé la couleur de la cellule, le code me colorie égallement toutes les autres cellules du tableau dès que je sélectionne d'autres lignes.


J'utilise une classe qui hérite de DefaultTableCellRenderer avec l'implémentation suivante :


public class CustomTableCellRenderer extends DefaultTableCellRenderer {

public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){

//Récupération du composant
Component cell = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);

//Modifier la couleur
if(value.equals("accessible"))
cell.setBackground(Color.GREEN);
else if (value.equals("non accessible")
cell.setBackground(Color.RED);

//Renvoi du composant
return cell;
}

}


Et voici le bout de code où je fais appel au Renderer dans ma classe héritant de JFrame :

//Si périphérique accessible
if(InetAddress.getByName(ip).isReachable(3000)){
model.setValueAt("accessible", selected, 3);
table.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
}
//Si périphérique non accessible
else{
model.setValueAt("non accessible", selected, 3);
table.setDefaultRenderer(Object.class, new CustomTableCellRenderer());
}


Si vous pouviez m'indiquez ce qu'il pourrait me manquer dans mon code ou ce qui pourrait s'avérer faux, ça m'aiderait beaucoup, ça fait un moment que je bloque dessus.

Merci d'avance.

10 réponses

La raison est assez simple. Ton renderer est le meme pour toutes les cellules et l'implementation par défaut que tu utilises à une seule instance d'un objet graphique (en l'occurence un JLabel).
Donc si tu definis une couleur rouge à un moment donné sur ton renderer, il va rester ainsi meme pour les cellules qui ne contiennent ni un "accessible" ni un "non accessible".
Si tu souhaites corriger ton probleme, essaye ceci :

//Modifier la couleur
if(value.equals("accessible")) {
cell.setBackground(Color.GREEN);
}
else if (value.equals("non accessible") {
cell.setBackground(Color.RED);
} else {
cell.setBackground(Color.BLANK);
}


Autre petite chose, tu n'a pas besoin de recréer un nouveau renderer à chaque changement de valeur, fais le une fois, à l'initialisation de ta table.

J'espere que cela résoudra ton souci
8
Effectivement, ça marche, j'ai remplaçé "BLANK" par "WHITE" et ça me donne bien ce que je veux.
Mille merci à toi!
0
Seb > Elyes
25 mars 2008 à 10:23
Bien content que cela te serve, désolé pour le 'Blank' un petit moment d'inattention ;)
bon courage pour la suite !
0
J'ai refait quelques essais, toujours le même problème.

J'ai pensé ajouter la méthode " table.setOpaque(true) " mais elle ne change strictement rien.

Quelqu'un aurait-il une idée s'il vous plaît ?
Je me doute que ça doit être un truc tout simple à ajouter et j'ai beau avoir cherché je n'ai toujours pas trouvé comment régler le problème.
0
Personne ne sait comment faire ?
0
Je me demande si ce n'est pas le JFrame qui pose problème.
Je vais essayer de voir si je peux représenter mon interface autrement...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Non, que ce soit en JFrame ou autre, ça change rien. Ca doit être un truc qui manque au code
J'ai un peu le même problème que toi, si je trouve j'te fais signe.
0
Ok, merci.
0
Ptet que c'est ton environnement de développement qui déconne, non ?
T'utilises quoi ?
0
Je développe sous Eclipse 3.3
0
Merci, déjà ça de réglé ça me retire une épine du pied.
C'était pas un problème si complexe, pourtant j'suis resté dessus un moment, mais bonj'vais pouvoir avancer maintenant.

En tout cas merci encore!
0
Es que tu peux poster ta solution ?merci
-1
La réponse a été donné, plus haut dans le thread.
0