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]Renderer et comportement selected/unselected


Sujet :

Composants Java

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

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Par défaut [JTable]Renderer et comportement selected/unselected
    Bonjour,

    j'ai une JTable avec que des renderers qui me permettait jusque la de définir la couleur foreground de toutes mes lignes en fonction du contenu de celle-ci.

    Pour ça j'ai donc fait dans la fonction "getTableCellRendererComponent" un set Foreground.

    Bref, tout ça c'est super mais pour peu que la couleur soit un peu foncé, lorsqu'on sélectionne ça devient illisible. Dans mon look and feel, la couleur de background lors de la selectionné c'est du bleu foncé. Et comme j'ai défini le foreground, le foreground ne bouge pas.

    Pour améliorer ça je me suis dit j'ai juste à passer la couleur en background. Sauf que c'est moche.

    Du coup je me suis dit que j'allais modifier la couleur de background quand ma ligne est selectionnée. Donc j'ai fait un tout bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                if (hasFocus) {
                    setBackground(color);
                } else {
                    setForeground(color);
                }
    J'ai essayé d'abord avec l'attribut isSelected. ça marche dans la mesure où quand je clic dessus la couleur passe du foreground au background, mais si j'en selectionne une autre, le background reste sur l'ancienne...

    Pour résumer : comment modifier la couleur de background d'une ligne selectionnée ? mais juste quand elle est selectionnée.

    Merci pour votre aide ^^

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    voici l'architecture que j'utlise dans mon projet et:
    * qui alterne la couleur blanche/grise 1 ligne sur 2
    * qui met le fond de la ligne en jaune, si celle-ci est "cochée" au titre de la base de donnée qui alimente la table
    * qui prend une couleur cyan lorsque je clique simplement sur la ligne pour la mettre en valeur:
    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
    @Override
    public Component getTableCellRendererComponent( JTable Table, Object Valeur, boolean yaselection, boolean yafocus, int ligne, int colonne )
    {
      super.getTableCellRendererComponent( Table, Valeur, yaselection, yafocus, ligne, colonne );
     
      if ( baseDonneesTable.get(ligne).selection ) // Si le drapeau dans les données indique que la ligne est cochée
        setBackground( Color.YELLOW );
      else if( !yaselection && !yafocus )
        setBackground(( ligne & 1 ) == 1 ? Color.CYAN : Color.WHITE );
     
      }
      else if( !yaselection && !yafocus )
      {
        setBackground(( ligne & 1 ) == 1 ? Color.CYAN : Color.WHITE );
      }
     
      return this;
    }
    Je pense que dans cette exemple, vous devriez trouver tous les cas de figure qui vous intéresse.

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

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Par défaut
    Je crois avoir compris ce qu'il se passait. Comme je ne redéfinissais pas toutes les couleurs à chaque fois, la jtable réutilisait les dernières config de couleur d'où un comportement un peu absurde. J'ai donc fait comme dans ton exemple, définis toutes les couleurs à chaque fois et du coup ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                if (isSelected) {
                    setBackground(color);
                    setForeground(Color.WHITE);
                } else {
                    int reste = row % 2;
                    if (reste == 0) {
                        setBackground(Config.darkTableBackGroundColor);
                    } else {
                        setBackground(Config.lightTableBackGroundColor);
                    }
                    setForeground(color);
                }
    Encore merci

    Enfin c'est dommage qu'on puisse pas dire "utilise la couleur du look and feel"

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    effectivement c'est dommage.
    Je suis tombé dans le même piège que vous la première fois que j'ai implémenté une JTable.
    Je crois qu'une fois qu'on indique à JAVA que l'on s'occupe du Renderer, il ne s'en occupe plus et nous laisse la main entièrement. Du coup, il faut tout gérer. Mais bon, ce n'est finallement pas très compliqué

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

Discussions similaires

  1. JTable - Renderer pour panel
    Par nabich dans le forum Composants
    Réponses: 2
    Dernier message: 18/01/2011, 23h11
  2. [JList - JTable] Renderer persistent
    Par Paniez dans le forum Composants
    Réponses: 2
    Dernier message: 01/10/2009, 13h58
  3. JTable Renderer case vide
    Par scorbo dans le forum Composants
    Réponses: 0
    Dernier message: 06/11/2008, 22h22
  4. Jtable, renderer et String
    Par reloadead dans le forum Composants
    Réponses: 6
    Dernier message: 22/03/2007, 16h21
  5. [Jtable] renderer?
    Par britou dans le forum Composants
    Réponses: 5
    Dernier message: 18/05/2004, 12h10

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