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 1 ligne sur 2


Sujet :

Composants Java

  1. #1
    Membre du Club Avatar de haco28
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut JTable colorer 1 ligne sur 2
    Bonjour a tous !
    Comme le titre l'indique je voudrais savoir comment dans une JTable je peux colorier 1 ligne sur 2 ?
    Merci

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Mouais... c'est plus complexe que filer un simple lien d'apprentissage.

    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;
      }
    }
    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
    JTable table = ... ;
    ...
    table.setDefaultRenderer(Object.class, new MyCellRenderer(table.getDefaultRenderer(Object.class)));

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Points : 72
    Points
    72
    Par défaut
    @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.

    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;
      }
     
    }
    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é.

    Au niveau de l'utilisation de la class il suffit de faire comme ceci dans la class qui étend la JTable (dans mon cas):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UserListCellRenderer cellRenderer = new UserListCellRenderer();
    setDefaultRenderer(Object.class, cellRenderer);
    ou directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UserListCellRenderer cellRenderer = new UserListCellRenderer();
    table.setDefaultRenderer(Object.class, cellRenderer);

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Points : 72
    Points
    72
    Par défaut
    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

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

Discussions similaires

  1. [JTable] coloration des lignes d'une JTable
    Par MathiasM dans le forum Composants
    Réponses: 3
    Dernier message: 22/06/2009, 11h19
  2. [2.3] Colorer 1 ligne sur 2 Crosstab
    Par sterix92 dans le forum BIRT
    Réponses: 4
    Dernier message: 18/02/2009, 19h09
  3. Colorer une ligne sur 2 dans un formulaire
    Par isabelle b dans le forum IHM
    Réponses: 15
    Dernier message: 16/07/2008, 20h34
  4. OleExcel colorer une ligne sur trois
    Par blondelle dans le forum C++Builder
    Réponses: 0
    Dernier message: 25/04/2008, 18h09
  5. Réponses: 3
    Dernier message: 30/08/2007, 09h56

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