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] colorer les cellules


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut [JTable] colorer les cellules
    bonsoir
    j'ai un problème que je cherche à régler
    j'ai essayé de colorer les ligne de jtable mais j'ai remarqué que le text ne paraisse pas que la couleur pas de texte
    voila le code
    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
     
    String[] column4 = { "A","B","C",  "D"};
    mode5 = new DefaultTableModel(column4, 0);
          mode5.addRow(new String[] {"DDDDDD", "DDDD", "DDDDDDDD", "DDDDDDD"});
            mode5.addRow(new String[] {"SSSS", "SSSSSSSSS", "DD", "SSSS"});
    jTable4 = new JTable(mode5);
         jTable4.getColumnModel().getColumn(0).setCellRenderer(new CellRenderer3());
             jTable4.getColumnModel().getColumn(1).setCellRenderer(new CellRenderer3());
     
     
    jScrollPane4.setViewportView(jTable4);
     
     
    class CellRenderer3 extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
        // si la ligne est sélectionnée alors on met la flêche
     
        if (row % 2 == 0) {
              this.setBackground(Color.orange);
          } else if (row % 2 == 1) {
              this.setBackground(Color.cyan);
          }
     
     
        return this;
     }
     }

    j'espere avoir une réponce merci

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est tout à fait normal, à aucun moment tu ne dis à ton renderer d'afficher le texte. Faut essayer de comprendre le code que tu reprends et pas simplement faire un copier coller (mal fait d'ailleurs).

    Dans le cas présent, tu dérives de DefaultTableCellRenderer, tu en redéfinis la méthode getTableCellComponent pour qu'elle affiche soit de l'orange soit du cyan, mais rien de plus.

    Dans ton cas il faut récupérer les component renvoyé par la méthode getTableCellComponent de la classe mère (par un appel à super.getTableCellComponent(...))puis lui affecter la couleur de fond.

    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
     
     
     
    class CellRenderer3 extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
     
        //On récupère le component fourni par la classe mère (qui contient bien le texte & cie)
        Component c = super.getTableCellRendererComponent(table, value isSelected, hasFocus, row, column);
        // si la ligne est sélectionnée alors on met la flêche
        //Puis on met la couleur de fond à ce composant 
        if (row % 2 == 0) {
              c.setBackground(Color.orange);
          } else if (row % 2 == 1) {
              c.setBackground(Color.cyan);
          }
     
     
        return c;
     }
     }

  3. #3
    Membre chevronné Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Par défaut
    Citation Envoyé par sinok Voir le message
    C'est tout à fait normal, à aucun moment tu ne dis à ton renderer d'afficher le texte. Faut essayer de comprendre le code que tu reprends et pas simplement faire un copier coller (mal fait d'ailleurs).

    Dans le cas présent, tu dérives de DefaultTableCellRenderer, tu en redéfinis la méthode getTableCellComponent pour qu'elle affiche soit de l'orange soit du cyan, mais rien de plus.

    Dans ton cas il faut récupérer les component renvoyé par la méthode getTableCellComponent de la classe mère (par un appel à super.getTableCellComponent(...))puis lui affecter la couleur de fond.

    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
     
     
     
    class CellRenderer3 extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
     
        //On récupère le component fourni par la classe mère (qui contient bien le texte & cie)
        Component c = super.getTableCellRendererComponent(table, value isSelected, hasFocus, row, column);
        // si la ligne est sélectionnée alors on met la flêche
        //Puis on met la couleur de fond à ce composant 
        if (row % 2 == 0) {
              c.setBackground(Color.orange);
          } else if (row % 2 == 1) {
              c.setBackground(Color.cyan);
          }
     
     
        return c;
     }
     }
    Par contre là où il faut faire attention avec les tableaux c'est d'éviter les calculs inutiles car ils sont multipliés ; ton else if (row % 2 == 1) { peut être remplacé par un simple else.
    En général ça ne porte pas trop à conséquence, mais si cela doit se reproduire pour chaque cellule à chaque rafraichissement.......

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    merci
    enfin j'ai compris le code et le fonctionnement DefaultTableCellRenderer

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2014, 16h33
  2. Réponses: 0
    Dernier message: 31/03/2011, 17h53
  3. [Swing / JTable] Rendre les cellules d'un JTable non éditables
    Par Jérôme_20 dans le forum Composants
    Réponses: 20
    Dernier message: 10/02/2011, 11h32
  4. colorer les cellules d'un formulaire
    Par salsero1 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 27/04/2007, 00h34
  5. [JTable] centrer les donnees dans les cellules
    Par cmoa59 dans le forum Composants
    Réponses: 5
    Dernier message: 20/05/2005, 12h35

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