IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Jtable : Couleur de row en fonction d'une valeur de cell


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Jtable : Couleur de row en fonction d'une valeur de cell
    Bonjour à tous,

    Voilà ce que je recherche à faire : faire qu'un row entier prenne une couleur de fond donnée, en fonction de la valeur d'une seule cellule de ce row.

    Valeur de la cellule "faux" -> row rouge
    Valeur de la cellule "mouairf" -> row orange
    Valeur de la cellule "vrai" -> row blanc

    J'ai trouvé plusieurs tutos pour modifier la couleur du row sélectionné/pas sélectionnée, d'une seule cellule etc, mais jamais ce que je présente au dessus.

    Pouvez vous m'aidez?

  2. #2
    Membre du Club Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Points : 65
    Points
    65
    Par défaut
    Dans les tutos que tu as lus, on parlait très probablement de renderer. Et qu'est ce que la méthode getTableCellRendererComponent prend en paramètre ?... La JTable dont la donnée value est extraite à la ligne row et la colonne column.
    Ne crois-tu pas que tu as toutes les données nécessaires pour trouver la valeur de la cellule qui contient "faux", "mouairf" ou "vrai" pour déterminer la couleur de fond de ton composant de rendu ?

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'ai effectivement fini par trouver une solution. Je ne sais pas si elle est "bonne" ou pas, mais elle fonctionne. Je la donne ici :

    Code du renderer personnalisé
    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
     
    private class CustomRenderer extends DefaultTableCellRenderer {
    	public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
    		Component comp = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
     
     
    		if(!isSelected){
    			// Valeurs pr défaut si la cell est vide
    			super.setBackground(Color.WHITE);
    			super.setForeground(Color.BLACK);
    			// récupération de la valeur à la column d'indice 7
    			//(ma dernière dans le cas présent, celle qui m'intéresse)
    			// row actuel, récupéré en paramètre
     
                Object val = table.getValueAt(row, 7);
                if(val instanceof String) {
                	if(val == "Vrai") super.setBackground(Color.WHITE);
                	if(val == "Mouairf")super.setBackground(Color.ORANGE);
                	if(val == "Faux"){
                		super.setBackground(Color.red);
                		super.setForeground(Color.white);
                	}
                }
    		} else {
    			// éventuelle couleur custom d'une row  sélectionnée
    		}
     
    		return comp;
    	}
    }
    Utilisation du renderer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJTable.setDefaultRenderer(Object.class, new CustomRenderer());
    Merci pour le coup de pouce.

  4. #4
    Membre du Club Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Points : 65
    Points
    65
    Par défaut
    Attention la méthode getValueAt(row, 7) de JTable te renvoie la valeur de la colonne d'indice 7 à l'écran. Si tu permets de réordonner les colonnes, la colonne 7 ne sera pas forcément celle qui contient la donnnée que tu recherches.
    Pour pallier à ce problème, remplace
    table.getValueAt(row, 7)
    par
    table.getModel().getValueAt(row, 7);
    ou
    table.getValueAt(row, table.convertColumnIndexToView(7));

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je ne permet pas de ré-ordonner les colonnes (non mais ho) mais je préfère suivre ton conseil, pour plus de sécurité.

    Merci

  6. #6
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 51
    Points
    51
    Par défaut
    Attention la méthode getValueAt(row, 7) de JTable te renvoie la valeur de la colonne d'indice 7 à l'écran. Si tu permets de réordonner les colonnes, la colonne 7 ne sera pas forcément celle qui contient la donnnée que tu recherches.
    En faite, justement, il faut qu'on ait la valeurs affiché à l'écran et pas celle du model.

    Quand on fait le setForground(color) dans la méthode getTableCellRendererComponent le row qu'on a en paramètre et auquel on applique la couleur est celui de l'écran. Il faut donc récupérer la valeur de l'autre cellule du même row, mais le row de l’écran, car celui du modèle est fixe alors que le row de l'écran varie.

    Je sais pas si j'ai été claire mais si besoin on peux m'envoyer un MP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. listview couleur d'une ligne en fonction d'une valeur
    Par Kanetsugu dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 27/03/2012, 11h48
  2. [XL-2007] Couleur en fonction d'une valeur
    Par clao260 dans le forum Excel
    Réponses: 2
    Dernier message: 23/02/2011, 09h44
  3. [XL-2003] Mettre une couleur de cellule en fonction d'une valeur.
    Par kev159 dans le forum Excel
    Réponses: 2
    Dernier message: 31/08/2010, 15h26
  4. Retourner une couleur en fonction d'une valeur
    Par vincent0808 dans le forum Langage
    Réponses: 7
    Dernier message: 08/06/2010, 23h27
  5. Réponses: 1
    Dernier message: 28/03/2007, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo