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 et couleurs des cellules


Sujet :

Composants Java

  1. #1
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Points : 355
    Points
    355
    Par défaut JTable et couleurs des cellules
    Bonjour à tous,

    je réalise actuellement une petite interface en Swing dans laquelle j'utilise un JTable. Chaque ligne est colorée en fonction de la valeur d'une des cellules de la ligne. Jusqu'ici pas de soucis.

    Le problème c'est que lorsque que j'effectue un tri ou que je filtre les données de ma JTable, la coloration n'est pas mise à jour.

    Je m'explique avec un exemple :
    - Imaginons un tableau pour lequel je souhaite coloré en rouge les lignes dont la case "test" est pair. A la création aucun soucis, les lignes seront colorées comme il faut.
    - Maintenant, si j'applique un filtre sur ce même tableau pour ne conserver que les lignes dont la case "test" est pair. Normalement, toutes mes lignes devraient être en rouge. Mais ce n'est pas le cas. En fait le filtre est bien effectué, mais la coloration des lignes restent identique.

    Quelqu'un aurait-il une idée ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour moi c'est que tu te base sur les données du modèle et non celles de la JTable.
    Au lieu d'utiliser le Model utilise le RowSorter (qui hérite également de Model).
    Tout ce que tu as à faire est de remplacer ton getModel par un getRowSorter et ça devrait faire l'affaire.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Théoriquement on devrait utiliser le CellRenderer pour cela, donc peut importe le modèle ou le rowsorter... Comment fais-tu cette coloration ?

    A noter qu'on peut carrément utiliser une propriété pour faire cela automatiquement (à condition de bien utiliser des renderer standard - c'est à dire qui hérite de DefaultCellRenderer) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // On défini la couleur d'alternance des lignes des JTables :
    UIManager.put("Table.alternateRowColor", Color.YELLOW);
    // L'autre couleur correspondra à la couleur de fond des JTable ;)
    a++

  4. #4
    Rédacteur/Modérateur
    Avatar de regis1512
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2008
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 264
    Points : 7 999
    Points
    7 999
    Par défaut
    Bonjour,

    Si je comprends bien ton problème, c'est au raffraichissement que tu as des lignes qui se retrouvent avec la mauvaise couleur.

    De mémoire , il me semble que j'avais résolu un problème dans le genre en exécutant la méthode :
    AbstractTableModel.html#fireTableDataChanged() ou AbstractTableModel.html#fireTableStructureChanged()

    Bon courage.
    Pourquoi cet avatar ? Parce que j'aime bien le tableau "Le Fils de l'homme" de Magritte.
    Mes contributions sur developpez.com

  5. #5
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Points : 355
    Points
    355
    Par défaut
    J'ai testé mais rien n'y fait, toujours le même problème.
    Pour info voici en gros le code de mon Renderer qui étend DefaultTableCellRenderer :
    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
     
    public Component getTableCellRendererComponent(  
    	JTable table, Object value, boolean isSelected, 
    		boolean hasFocus, int row, int col){
     
    	Component comp = super.getTableCellRendererComponent(table,  value, isSelected, hasFocus, row, col);   
     
    	String priorite =  table.getModel().getValueAt(row, 2).toString();
     
    	//suivant la valeur de la cellule priorité (n°2)
    	if(priorite.equals("pair")
    		comp.setForeground(Color.red);			  
    	else
    		comp.setForeground(Color.blue);
    	}			     
    	return(comp);
    }
    Si ça peut vous aider...

    Par contre, adiGuba, pourrais-tu m'en dire un peu plus sur l'utilisation du UIManager, car j'avoue ne pas avoir bien saisi ta proposition...

    Merci

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par sinok Voir le message
    Pour moi c'est que tu te base sur les données du modèle et non celles de la JTable.
    Au lieu d'utiliser le Model utilise le RowSorter (qui hérite également de Model).
    Tout ce que tu as à faire est de remplacer ton getModel par un getRowSorter et ça devrait faire l'affaire.
    C'est plus clair comme ça? car tu as un bon gros getModel qui traine qui n'est pas bindé avec les bonnes lignes car le renderer prend en compte les lignes fournies par la JTable.

    Ou alors il te faut utiliser les méthodes de conversion d'index proposées par la JTable convertRowIndexToModel / convertRowIndexToView
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Rédacteur/Modérateur
    Avatar de regis1512
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2008
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 264
    Points : 7 999
    Points
    7 999
    Par défaut
    Bonsoir,

    D'après ce que dit Sinok, je te propose d'afficher le row et la valeur priorite correspondante à chaque appel du getTableCellRendererComponent.

    Ca mettra en évidence les valeurs.
    Et ca vérifiera si la méthode est bien rappelé après la mise à jour.

    bon courage.
    Pourquoi cet avatar ? Parce que j'aime bien le tableau "Le Fils de l'homme" de Magritte.
    Mes contributions sur developpez.com

  8. #8
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    tout d'abord merci pour vos réponses, et en particulier à sinok qui m'a mis sur la voie. Le problème est résolu en modifiant cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String priorite =  table.getModel().getValueAt(row, 2).toString();
    par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String priorite = table.getValueAt(row, 2).toString();
    Je me basais effectivement sur les données du modèle et non pas sur les données réellement présentes dans mon JTable. Ton message était pourtant clair, mais j'sais pas j'avais pas saisi sur le coup.

    Merci encore

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/06/2011, 13h12
  2. [JTable] Couleur des cellules
    Par eighty_three dans le forum Composants
    Réponses: 2
    Dernier message: 20/05/2008, 17h55
  3. Tableau et couleur des cellules
    Par DaisyVIP dans le forum ASP.NET
    Réponses: 7
    Dernier message: 08/02/2008, 12h30
  4. couleur des cellules de JTable
    Par adil1251985 dans le forum Composants
    Réponses: 5
    Dernier message: 05/06/2007, 12h31
  5. [D7] Couleur des cellules d'un StringGrid
    Par raoulmania dans le forum Composants VCL
    Réponses: 5
    Dernier message: 15/12/2005, 15h39

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