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 :

Couleurs dans une JList


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 45
    Par défaut Couleurs dans une JList
    salut à tous,

    je bloque sur un truc qui je pensais etre tout simple au depart...

    je souhaiterai que certains elements de ma JList aient une couleur diferente par rapport a d'autres.
    la couleur n'etant pas attribuée lors d'un click dans la JList ...

    j'ai regardé les methodes de DefaultListModel mais j'ai rien trouvé de concluant pour attribuer une couleur lorsque j'ajoute un composant


    J'ai regardé aussi les methodes de ListCellRenderer mais tout est en rapport avec la selection des cellules de la JList donc je ne peux rien faire avec ça ...

    est ce que quelqu'un aurait une solution svp ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 45
    Par défaut
    bon apres des heures de recherches je pense que ma reponse est surement dans ListCellRenderer
    Par contre je suis un peu paumé avec la methode getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)

    quelqu'un peut il me venir en aide pour m'aider à gerer cette methode svp ?

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 112
    Par défaut
    la methode getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    retourne un Component qui serat affiché dans la liste.

    - le parametre value est l'objet dans dans liste.

    par exemple s'il s'agit de String ou de Color :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
     
    JLabel comp = new JLabel("");
     
    if(value instanceof String){
        comp.setText( (String)value);
        }
    else if(value instanceof Color){
        comp.setBackground( (Color)value);
        }
     
    return comp;
    }

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Attention il ne faut pas créer un nouveau JLabel à chaque appel de la méthode getListCellRendererComponent() !!!

    En effet cette méthode n'est pas utilisé pour "ajouter" des composants de manière "standard". En fait elle est appelé a chaque fois que la cellule est (re-)dessiné, et le composant n'est pas ajouté mais directement dessiné dans la JList...

    En créant un JLabel à chaque fois tu risque de saturer le Garbage Collector...


    De plus, étant donné ce fonctionnement un peu particulier, il y a un certain nombre de méthode à redéfinir car elle exécute alors du code inutile...


    Le plus simple est d'hériter de DefaultListCellRenderer (qui lui même hérite de JLabel) et de redéfinir la méthode getListCellRendererComponent() :

    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 class ListCellRenderer extends DefaultListCellRenderer {
     
    	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    		// On appelle la méthode parent qui initialise tout :
    		super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
     
    		// On caste l'objet courant dans le type des objets de la JList
    		if (value instanceof TaClasse) {
    			TaClasse element = (TaClasse) value;
    			// On modifie la couleur de fond :
    			setBackground( element.getColor() );
    		}
    		// On retourne l'élément courant :
    		return this;
    	}
     
    }
    L'appel à la méthode getListCellRendererComponent() de la classe parente permet d'initialiser tout comme il faut sans trop s'embêter. Cette méthode modifie ses propres propriétés et se retourne elle-même. Ainsi c'est le composant DefaultListCellRenderer qui est utilisé pour tous les éléments de la liste (ses propriétés sont juste modifié avant chaque affichage).

    Ensuite, il suffit de caster le paramètre value dans le type que tu utilises dans tes données, pour récupérer ses attribut et modifie comme bon te semble le composant avant de le retourner...

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 45
    Par défaut ok ...
    là je comprend mieux le fonctionnement,

    par contre là où je decroche c'est que je ne comprend pas comment je peux declencher cette methode au moment ou la liste est initialiser par defaultlistmodel...

    dans la class JList je ne trouve pas de methode me permettant de retourner un item sans qu'il soit forcement selectionner

    ListCellRendererComponent c'est pareil........


    desolé j'ai repondu trop vite ........... j'ai pas vu cette deuxieme reponse... je retire ce que je viens dire .....

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 45
    Par défaut
    donc si je comprend bien il faut que je redefinisse la methode getListCellRendererComponent de la classe DefaultListCellRenderer
    et que j'affecte le DefaultListCellRenderer redefnis à ma JList pour que les couleurs apparaissent losque la JList s'initialise ?

  7. #7
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kobrapercussions
    donc si je comprend bien il faut que je redefinisse la methode getListCellRendererComponent de la classe DefaultListCellRenderer
    et que j'affecte le DefaultListCellRenderer redefnis à ma JList
    Oui et Oui...

    Citation Envoyé par kobrapercussions
    pour que les couleurs apparaissent losque la JList s'initialise ?
    Pas lorsqu'elle s'initialise, mais à chaque fois qu'elle dessine ou redessine une cellule...

    a++

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

Discussions similaires

  1. Couleur dans une console
    Par P'tite Nélodie dans le forum C
    Réponses: 6
    Dernier message: 05/04/2006, 20h42
  2. inserer une image et du texte dans une Jlist
    Par cellestion dans le forum Composants
    Réponses: 4
    Dernier message: 04/03/2006, 00h47
  3. [C#] Probleme de couleur dans une ListView
    Par Oberown dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/12/2005, 18h39
  4. mettre de la couleur dans une cellule
    Par Jiraiya42 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/06/2005, 11h16
  5. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 09h40

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