Bonjour a tous !
Comme le titre l'indique je voudrais savoir comment dans une JTable je peux colorier 1 ligne sur 2 ?
Merci
Bonjour a tous !
Comme le titre l'indique je voudrais savoir comment dans une JTable je peux colorier 1 ligne sur 2 ?
Merci
Mouais... c'est plus complexe que filer un simple lien d'apprentissage.
Après, les choses se corsent : il faut l'attribuer pour chaque classe que tu utilises dans ton tableau. Mais bon, on va dire que tu n'as pas 10000 renderers à créer et même que t'en as pas du tout ! Donc, on va simplement faire ceci :
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 class MyCellRenderer implements TableCellRenderer { private TableCellRenderer tcr; public MyCellRenderer (TableCellRenderer tcr) { this.tcr = tcr; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component comp = this.tcr.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if ((row & 1) == 0) { // Ligne paire comp.setBackground(Color.RED); } else { // Ligne impaire comp.setBackground(Color.BLUE); } return comp; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 JTable table = ... ; ... table.setDefaultRenderer(Object.class, new MyCellRenderer(table.getDefaultRenderer(Object.class)));
@dingoth, merci pour ton code car il m'a permis de faire facilement ce que je voulais mais pour qu'il fonctionne il ne suffit pas d'implémenter l'interface TableCellRenderer car tu ne pourra pas faire super.get...
Il faut extends DefaultTableCellRenderer qui implements déjà l'interface TableCellRenderer.
De plus, je n'ai pas trouvé l'intérêt de déclarer un TableCellRenderer et au final voici mon code qui permet de changer la couleur d'une ligne en fonction du contenu de la seconde colonne tout en gardant la couleur de sélection des lignes.
Le constructeur n'est pas obligatoire car il fait appelle à super() seulement mais vu que je vais plus tard rajouter des trucs dedans, je l'ai gardé.
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 public class UserListCellRenderer extends DefaultTableCellRenderer { /** Creates a new instance of UserListCellRenderer */ public UserListCellRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component component = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column); if (table.getSelectedRow() == row) { component.setForeground(table.getSelectionForeground()); component.setBackground(table.getSelectionBackground()); } else if (table.getValueAt(row, 1).equals("ONLINE")) { component.setForeground(Color.BLACK); component.setBackground(Color.GREEN); } else if (table.getValueAt(row, 1).equals("OFFLINE")) { component.setForeground(Color.RED); component.setBackground(Color.LIGHT_GRAY); } return component; } }
Au niveau de l'utilisation de la class il suffit de faire comme ceci dans la class qui étend la JTable (dans mon cas):
ou directement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UserListCellRenderer cellRenderer = new UserListCellRenderer(); setDefaultRenderer(Object.class, cellRenderer);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UserListCellRenderer cellRenderer = new UserListCellRenderer(); table.setDefaultRenderer(Object.class, cellRenderer);
Tu as raison : à la place de super, il fallait simplement mettre this.tcr. J'ai confondu héritage et composition, désolé (au départ, j'étais parti sur une idée d'héritage, mais je me suis ravisé par la suite). Enfin, tu as compris le principe, c'est le principal
Oui oui! Merci ton code m'a super aidé car je me galérais depuis un moment sur ce point.
Je penses qu'avec çà on peut marquer ce topic comme [Résolu] même si son auteur n'a pas encore réagi
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager