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 :

Colorer les élements d'un jlist


Sujet :

Composants Java

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut Colorer les élements d'un jlist
    Bonsoir;

    S'il vous plait pourriez vous m'aidez pour ce problème

    Ce code a toujours fait la coloration du dernier index mis à jour il écrase ne fait pas la coloration d'ancien
    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
    29
    30
    private class MyListCellRenderer extends DefaultListCellRenderer{
     
            private int indexColor ;
            private JList list ;
            public MyListCellRenderer(JList list , int index){
                this.list = list ;
                this.indexColor = index ;
            }
            public void setIndexColor(int index) {
                this.indexColor = index;
                this.list.repaint();
            }
     
            @Override
            public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                if( index == this.indexColor ){
                    setBackground(Color.red);
                }
                return c ;
            }
        }
     
     
     
    MyListCellRenderer r = new MyListCellRenderer(jList,0);
    jList.setCellRenderer(r);
     
    r.setIndexColor(1);
    r.setIndexColor(2);//cet item qui est coloré mais le premier non

    Merci d'avance pour vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    Je pense que tu n'as pas bien compris comment fonctionne un renderer dans une JList. La JList va créer un seul et unique renderer qu'elle va ensuite configurer pour afficher chaque ligne de donnee.
    Dans ton code tu stockes uniquement un seul indice a colorier donc il est tout a fait normal que lorsque tu le changes, seule cette ligne-la soit mise en couleur. Si tu veux colorier plusieurs indices, tu dois stocker plusieurs indices...

    Donc au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int indexColor ;
    plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<Integer> indexColor = new ArrayList<>();
    remplacer la méthode setIndexColor() par une méthode addIndexColor(), et surtout faire les test appropries genre if (indexColor.contains(index)) { [...]
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par bouye Voir le message
    Je pense que tu n'as pas bien compris comment fonctionne un renderer dans une JList. La JList va créer un seul et unique renderer qu'elle va ensuite configurer pour afficher chaque ligne de donnee.
    Dans ton code tu stockes uniquement un seul indice a colorier donc il est tout a fait normal que lorsque tu le changes, seule cette ligne-la soit mise en couleur. Si tu veux colorier plusieurs indices, tu dois stocker plusieurs indices...

    Donc au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int indexColor ;
    plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List<Integer> indexColor = new ArrayList<>();
    remplacer la méthode setIndexColor() par une méthode addIndexColor(), et surtout faire les test appropries genre if (indexColor.contains(index)) { [...]

    Salut encore;merci pour votre réponse

    J'ai essayé de changé le code comme vous avez dit,C'est comme ça non
    Mais maintenant aucun des deux items a été colorié
    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
    private class MyListCellRenderer extends DefaultListCellRenderer{
     
           private ArrayList<Integer> indexColor = new ArrayList<>();
            private JList list ;
            public MyListCellRenderer(JList list , int index){
                this.list = list ;
                indexColor.add(index) ;
            }
            public void addIndexColor(int index) {
               indexColor.add(index); 
               this.list.repaint();
     
            }
     
            @Override
            public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                if( indexColor.contains(index) ){
                    setBackground(Color.RED);
                }
                return c ;
            }
        } MyListCellRenderer r = new MyListCellRenderer(jList3,0);
                                        r.addIndexColor(1);
                                        r.addIndexColor(2);

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    Cela marche pourtant très bien moi :

    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 Main {
     
        public static void main(String... args) {
            SwingUtilities.invokeLater(Main::start);
        }
     
        private static void start() {
            final DefaultListModel listModel = new DefaultListModel();
            listModel.addElement("Truc");
            listModel.addElement("Chose");
            listModel.addElement("Machin");
            listModel.addElement("Bidule");
            listModel.addElement("Toto");
            final JList jList = new JList(listModel);
            final MyListCellRenderer r = new MyListCellRenderer(jList, 0);
            r.addIndexColor(1);
            r.addIndexColor(2);
            r.addIndexColor(4);
            jList.setCellRenderer(r);
            final JFrame frame = new JFrame();
            frame.setLayout(new BorderLayout());
            frame.add(new JScrollPane(jList), BorderLayout.CENTER);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
            frame.setVisible(true);
            frame.pack();
        }
    }
    Nom : jlistcolor.jpg
Affichages : 186
Taille : 6,9 Ko

    Le code du renderer est exactement celui que tu as poste sans aucune modification.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    oui ça marche maintenant ;j'ai oublié la ligne de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      jList3.setCellRenderer(r);
    merciii infiniment pour votre aide

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

Discussions similaires

  1. Afficher les élements d'un formulaire dans une autre fenetre
    Par BernardT dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2005, 22h52
  2. Réponses: 1
    Dernier message: 27/10/2005, 09h22
  3. [select count(*)] Compter les élements differents
    Par azmodai dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/10/2005, 11h49
  4. ajuster les élements de la page
    Par samourai_alex dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/06/2005, 22h07
  5. colorer les scrollbars
    Par reg11 dans le forum Composants VCL
    Réponses: 19
    Dernier message: 06/06/2005, 20h42

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