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 :

Couleur d'une colonne d'une JTable


Sujet :

Composants Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut Couleur d'une colonne d'une JTable
    Bonsoir à tous,
    Le tutoriel de Thierry LERICHE-DESSIRIER m'a beaucoup intéressé concernant la colorisation d'une colonne d'une Jtable.

    J'ai une application qui comprend une Jtable reliée à une base de données, aussi j'aimerais colorer les lignes d'une colonne en fonction de la valeur contenue dans celle-ci...

    Ma Jtable qui est reliée à la base de données se nomme masterTable.

    J'ai donc crée une classe à l'aide du tutoriel qui est la suivante :

    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
    public class jTableCouleurs extends DefaultTableCellRenderer {
     
        @Override
     
     
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
     
     
     
     table.getColumnModel().getColumn(6).setCellRenderer(this); 
     
     
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);  
     
     String Dategestion = (String) value;
     
        if (Dategestion == null) {
            setBackground(Color.red);
        } else {
            setBackground(Color.green);
        }
     
     
    return this;
     
        }
    }
    A partir d'une autre classe, j'appelle cette classe me permettant de colorier les lignes d'une colonne en fonction de sa valeur..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masterTable.setDefaultRenderer(Object.class, new jTableCouleurs());
    Lorsque je lance mon application ( sous Netbeans ), j'ai bien la colonne concernée qui se colore en fonction de sa valeur...mais j'ai en plus la première colonne qui se colorie ainsi que la numéro 3 et 4 ( il y a 6 colonne en tout dans ma table..)
    J'ai du mal à comprendre pourquoi les trois autres colonne se colorient également.
    Après réflexions et essais de compréhension, je constate qu'il me colore les colonnes une, trois, et quatre en fonction de la valeur contenue dans celles -ci. Les couleurs correspondent bien à rouge dans ces colonnes si elle sont vide et inverse en vert si elle sont remplis..
    Mais à aucun moment dans mon code indiqué au dessus je mentionne le coloriage d'une ou d'autres colonnes...
    Il y bien " getColumn(6) " d'indiqué.....les autres colonnes ne m’intéressant pas...
    J'ai du mal à comprendre..
    Merci d'avance pour votre aide ou me donner une piste éventuellement..

    A+

  2. #2
    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,


    Déjà il ne faut pas définir le setCellRenderer() dans le renderer, Sinon ca va être fait à chaque fois qu'une cellule est redessiné...


    Ensuite, si tu définis ton renderer sur toutes les cellules avec setDefaultRenderer(), c'est normal qu'elle soit toute colorisé. Ce serait plutôt là que tu devrais faire le setCellRenderer() sur la colonne en question.


    a++

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Salut adiGuba,

    il ne faut pas définir le setCellRenderer() dans le renderer
    C'est quoi le renderer ?

    Ce serait plutôt là que tu devrais faire le setCellRenderer() sur la colonne en question.
    Tu veux dire à l'endroit où je fais appel à la classe du jTableCouleurs ? :
    masterTable.setDefaultRenderer(Object.class, new jTableCouleurs());
    Car il ne me propose pas le "setCellRenderer()..." Je suppose qu'il y a une combinaison de mots clefs pour l'obtenir ?

    Merci pour ton aide...
    A+

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Je suis entrain de chercher...
    Possible que je sois sur la bonne piste ..? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     masterTable.getColumn(6).setCellRenderer(new jTableCouleurs());
    et au niveau de la classe jTableCouleurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(6);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(6).setCellRenderer(this);
    Mais j'ai des erreurs au moment de l'excéctution du programme..

  5. #5
    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
    Le renderer c'est "jTableCouleurs". C'est à dire la classe charger d'afficher une cellule.

    Citation Envoyé par Telemak Voir le message
    Je suis entrain de chercher...
    Possible que je sois sur la bonne piste ..? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     masterTable.getColumn(6).setCellRenderer(new jTableCouleurs());
    Oui


    Citation Envoyé par Telemak Voir le message
    et au niveau de la classe jTableCouleurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(6);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(6).setCellRenderer(this);
    NON ! Tu n'as pas à refaire cela dans ta classe jTableCouleurs !
    Supprimes tout simplement la ligne...


    Citation Envoyé par Telemak Voir le message
    Mais j'ai des erreurs au moment de l'excéctution du programme..
    Quelles erreurs ????


    a++

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    J'ai le message d'erreur suivant :

    java.lang.IllegalArgumentException: Identifier not found
    at javax.swing.table.DefaultTableColumnModel.getColumnIndex(DefaultTableColumnModel.java:282)
    at javax.swing.JTable.getColumn(JTable.java:2564)

    etc..
    Il me renvois à la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masterTable.getColumn(6).setCellRenderer(new jTableCouleurs());
    J'ai supprimé la ligne du code du renderer :
    table.getColumnModel().getColumn(6).setCellRenderer(this);
    Merci à toi.

  7. #7
    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
    On dirait qu'il ne trouve pas la colonne 6.
    Le modèle est-il déjà associé à la JTable ?
    On pourrait voir un peu plus de code de création de la JTable.


    a++

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Salut adiGuba,

    En fait j'ai crée ma jTable avec Netbeans..donc pas de code en "direct".
    Au niveau de la table il y a des "Binding " en place avec une base de données..mais en principe cela ne devrais pas jouer car avec mon code d'erreur il effectue bien la colorisation..sauf sur des colonnes en plus...

    Je vais tester en modifiant le numéro de colonne, pour vérifier si j'ai le même message d'erreur..

    Je me suis également posé la question si je ne devrais pas au niveau du renderer faire appel à ma masterTable plutôt qu'à jTabe table à partir de l'autre class où se situe, on va dire en quelque sorte la class principale ?
    Un peu à l'instars de ce que je fais pour le renderer, mais en sens inverse :
    [CODEmasterTable.setDefaultRenderer(Object.class, new jTableCouleurs()); ][/CODE]
    Je ne sais pas comment le faire..j'ai fait un import de la class principale, mais en tapant le mot clef "masterTable", il ne me le met pas en autocompléttion couleur verte, donc il ne le reconnait pas.

    Actuellement je ne suis pas derrière l'écran où se trouve le programme..je vais retenter vers cette soirée..

    Merci à toi..
    A+

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Voilà j'ai rectifié mon code par celui -ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     masterTable.getColumnModel().getColumn(6).setCellRenderer(new jTableCouleurs());
    et ça fonctionne...


    Merci pour ton aide adiGuba..

    Bon coding..
    A+

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Par contre je viens de m'en apercevoir, que les éléments contenus dans la colonne avec les couleurs ne sont plus centrés.
    Voici le code pour le centrage des colonnes concernées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
     custom.setHorizontalAlignment(JLabel.CENTER);
     
               masterTable .getColumnModel().getColumn(1).setCellRenderer(custom);
               masterTable .getColumnModel().getColumn(2).setCellRenderer(custom);
               masterTable .getColumnModel().getColumn(5).setCellRenderer(custom);
               masterTable .getColumnModel().getColumn(6).setCellRenderer(custom);
    Je pense que cela provient du "DefaultTableCellRendrer custom = new DefaultTableCellRenderer()", étant donné que je redéfinie un nouveau "Renderer" ?
    Comment je peux maintenir le centrage dans la colonne sans qu'il n'y ait d'altération au moment du coloriage des cellules ?

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  4. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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