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 :

Soucis pour personnaliser une JList


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut Soucis pour personnaliser une JList
    Bonsoir,
    J'ai un petit soucis avec la JList,j'ai creer la liste avec un setModel et j'aimerai mettre une image et personnaliser les items de la JList en fonction du nom d'une personne.
    J'ai vu qu'il fallait utiliser un getListCellRenderComponent pour arriver a mettre une image et personnaliser cette JList.
    Le probleme ces que j'y arrive seulement quand la personne clique a un endroit sur ma liste, mais si je tente de changer la methode sans faire attention a si la personne a clique sur mon items mais plutot de construire les items en fonction de leur nom et leur mettre une image et bien ca ne fonctionne pas:/
    J'espere avoir été clair car ces pas facil a expliquer.

    Voici mon 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
        public class Rendu extends JLabel implements ListCellRenderer {
           ImageIcon icon;
           ImageIcon selectIcon;
           Color selectCouleur = Color.RED;
           public  Rendu(){
              icon = new ImageIcon(getClass().getResource("/images/icone_online.gif"));
              selectIcon  = new ImageIcon(getClass().getResource("/images/icone_messenger_offline.png"));
           }
           public Component getListCellRendererComponent(JList list,
                Object value, // valeur à afficher
                int index, // indice d'item
                boolean isSelected, // l'item est-il sélectionné
                boolean cellHasFocus) // La liste a-t-elle le focus
           {
              String s = value.toString();
              int tailleListe=jList1.getModel().getSize();
              try{
              for(int i=0;i<listeContactOnline.size();i++){
                  for(int k=0;k<tailleListe;k++){
                      if(listeContactOnline.get(i).equals(jList1.getModel().getElementAt(k))){
                     setBackground(list.getBackground());
                     setForeground(list.getForeground());
                     setText(s);
                     setIcon(icon);
                      }
                      else{
     
     
                      }
     
                  }     
              }
              }catch(Exception e){
                  System.out.println("erreur dans le getlistcellrender");
                  e.printStackTrace();
              }/*
              if (isSelected) {
                 setBackground(list.getSelectionBackground());
                 setForeground(selectCouleur);
                 setText(s+"  "+index);
                 setIcon(selectIcon);
              }else{
              }*/
              setEnabled(list.isEnabled());
              setFont(list.getFont());
              setOpaque(true);
     
              return this;
           }
        }
    }

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Voici mon code mis a jour, il est plus proche de ce que je cherche a faire, et je vois que dans mon code je rentre bien deux fois dans la boucle(qui affiche 'vrai' dans la console) pour les personnes en ligne vu qu'il y en a deux.
    Le truc que je comprend pas ces que change l'icone si on rentre dans la boucle, mais apparement ce n'est pas le cas :/
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
           public Component getListCellRendererComponent(JList list,
                Object value, // valeur à afficher
                int index, // indice d'item
                boolean isSelected, // l'item est-il sélectionné
                boolean cellHasFocus) // La liste a-t-elle le focus
               {
              String s = value.toString();
              int tailleListe=jList1.getModel().getSize();
     
             if(isSelected) {
             setBackground(list.getSelectionBackground());
             setForeground(selectCouleur);
             setText(s+"  "+index);
             //setIcon(selectIcon);
             }else{
             setBackground(list.getBackground());
             setForeground(list.getForeground());
             setText(s);
             //setIcon(icon);
             }
              try{
              for(int i=0;i<tailleListe;i++){
                  for(int k=0;k<listeContactOnline.size();k++){
                      if(listeContactOnline.get(k).equals(jList1.getModel().getElementAt(i))){
                          System.out.println("vrai");
                          setIcon(selectIcon);
                     }
                      else{System.out.println("faux");
                          setIcon(icon);
                      }
     
                  }
              }
              }catch(Exception e){
                  System.out.println("erreur dans le getlistcellrender");
                  e.printStackTrace();
              }
              setEnabled(list.isEnabled());
              //setFont(list.getFont());
              setOpaque(true);
              return this;
           }
        }
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Je n'aurais pas fais comme cela.
    Ta liste est une liste de Contact.
    Donc je suppose que tu as une class Contact !
    Dans ton exemple, les Objets (value) que tu ajoutes dans ta liste sont des String.
    Pourquoi ne pas y ajouter des Contact !
    Ensuite dans ta class contact, tu as une méthode isOnline() que tu utilises pour choisir l'icone !

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Heu non je n'est pas de classe contact . Ces le server qui gere tous ce qui concerne les contacts.
    De plus pour le reste du programme j'ai utiliser la list avec setmodel et je me suis basé la dessus pour construire le reste . Donc si il y avait moyen de pas tous changer ca serait mieux :p .
    Surtout qu'ici je comprend pas trop pourquoi ca ne fonctionne pas avec mon code car tous y est pour que ca fonctionne normalement
    Merci pour l'aide apportée

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Je pense que tu comprends mal le fonctionnement de cette méthode.
    Tu fais des boucles dans cette méthode pour faire le parcours de tous tes éléments, ce qui est une erreur.
    Lorsque ta JList va vouloir dessiner tes lignes, elle va appeler cette méthode pour chaque ligne.

    value sera la valeur d'entrée, avec laquelle tu feras les tests que tu souhaites et Component la valeur de sortie (le dessin de ta ligne).

    En partant de ton code je te propose ça :
    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
    31
    32
     
    public class Rendu implements ListCellRenderer{
     
    	public Component getListCellRendererComponent(JList list, 
    			Object value, // valeur à afficher
    			int index, // indice d'item
    			boolean isSelected, // l'item est-il sélectionné
    			boolean cellHasFocus) // La liste a-t-elle le focus
    	{
     
    	     String s = value.toString();
    	     JLabel label = new JLabel(s); // servira a l'affichage
    	     label.setOpaque(true);
     
    	     if(isSelected) {
    	    	 label.setBackground( La couleur du fond si selectionné );
    	    	 label.setForeground( La couleur du texte si selectionné );
    	     }else{
    	    	 label.setBackground( La couleur du fond si non selectionné );
    	    	 label.setForeground( La couleur du texte si non selectionné );
    	     }
     
     
    	     if(listeContactOnline.contains(value)){ // par contre il faut que ta listeContactOnline contienne les même objet que tu auras en value.
    	    	 label.setIcon( L'icone si online );
    	     }else{
    	    	 label.setIcon( L'icone si offline );
    	     }     
     
    	     return label;
    	}
    }

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Par défaut
    Merci beaucoup ca m'a permit de resoudre mon probleme j'avais effectivement mal compris la methode en fesant des boucles .
    A la prochaine et encore merci

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

Discussions similaires

  1. [RegEx] soucis pour adapter une requête
    Par Him dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2008, 16h39
  2. Souci pour inserer une carte graphique
    Par coralie26 dans le forum Composants
    Réponses: 3
    Dernier message: 04/02/2008, 16h22
  3. Souci pour visualiser une image
    Par bastien dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/02/2008, 12h39
  4. Soucis pour exécuter une fonction
    Par Olivier Regnier dans le forum Langage
    Réponses: 1
    Dernier message: 15/11/2007, 13h01

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