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 :

[JList] Remplir à partir d'objets


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [JList] Remplir à partir d'objets
    Bonjour,

    j'ai un combobox avec un renderer qui va bien pour m'afficher un nom et un prenom. ex : "bob , morane".

    le pb c'est que pour l'instant je l'ai fait grace à 2 String[] et que maintenant je voudrais plutôt le faire avec une classe Personne.

    voici mon code (renderer):
    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
     
    package loc.julien.visu;
     
    import java.awt.Component;
     
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.ListCellRenderer;
     
    public class AlternateListCellModel extends JLabel 
    					implements ListCellRenderer {
     
    	private String[] listNom;
    	private String[] listPrenom;
     
    	public AlternateListCellModel(String[] ln, String[] lp) {
    		super();
    	    setOpaque(true);
    	    listNom = ln;
    	    listPrenom = lp;
    	}
     
    	public Component getListCellRendererComponent(
    						            JList list,
    						            Object value,
    						            int index,
    						            boolean isSelected,
    						            boolean cellHasFocus){
     
    		int selectedIndex = ((Integer)value).intValue();
     
    		//pour un affiche correcte
    		if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }
     
    		//le nom et le prenom afficher cote a cote
    		setText(listNom[selectedIndex]+", "+listPrenom[selectedIndex]);		
     
    		return this;
    	}
    }
    et ma classe Peronne :
    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
    53
    54
    55
    56
     
    package loc.julien.visu;
     
    public class Personne{
     
    	private String nom = null;
    	private String prenom = null;
     
    	public Personne(){
    		super();
    	}
     
    	/**
             * Créer une personne avec un nom et un prenom
             * @param n
             * @param p
             */
    	public Personne(String n, String p){
    		nom = n;
    		prenom = p;
    	}
     
    	/**
             * Donne le nom de la personne
             * @return String
             */
     
    	public String getNom(){
    		return nom;		
    	}
     
    	/**
             * Donne le prenom de la personne
             * @return String
             */
     
    	public String getPrenom(){
    		return nom;		
    	}
     
    	/**
             * Entre un nom
             * @param String
             */
    	public void setNom(String n){
    		nom = n;
    	}
     
    	/**
             * Entre le prenom
             * @param String
             */
    	public void setPrenom(String p){
    		prenom = p;
    	}
    }

  2. #2
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 39
    Par défaut
    Attention au mode éditable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class PersonneRenderer extends DefaultListCellRenderer {
      public Component getListCellRendererComponent(
                   JList list, Object value, int index, 
                   boolean isSelected, boolean cellHasFocus) {
        JLabel jl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if (value instanceof Personne)
          this.setText( ( (Personne) value).getNom() + ", " + ( (Personne) value).getPrenom());
        return this;
      }
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    je n'ai pas saisie cette partie :

    JLabel jl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

  4. #4
    Invité
    Invité(e)
    Par défaut
    et que dois-je mettre lors de la creation de mon combobox ?

    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
     
    private JComboBox getJComboBoxPersonne() {
     
    		Integer[] intArray = new Integer[listNom.length];
            for (int i = 0; i < listNom.length; i++) {
                intArray[i] = new Integer(i);
            }
     
    		if (jComboBoxPersonne == null) {
    			jComboBoxPersonne = new JComboBox(intArray);
    			jComboBoxPersonne.setBounds(30, 36, 145, 25);
    		}		
    		AlternateListCellModel renderer = new AlternateListCellModel();
    		jComboBoxPersonne.setSelectedIndex(-1);
    		jComboBoxPersonne.setRenderer(renderer);
    		return jComboBoxPersonne;
    	}

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Tu passes à ton JComboBox le tableau contenant les Personnes.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Personne[] tesPersonnes = new Personne[2];
     
    tesPersonnes[0] = new Personne( "coucouNom", "coucouPrenom" );
    tesPersonnes[1] = new Personne( "salutNom", "salutPrenom");
     
    comboBox = new JComboBox( tesPersonnes );
    puis tu appliques le renderer affiché précédemment.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 39
    Par défaut
    Citation Envoyé par Crash_TeTe
    je n'ai pas saisie cette partie :

    JLabel jl = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    En fait, comme ça, le "look standard" et les traitements du renderer par défaut sont conservés. Seul le texte est modifié à ta convenance.

    En mode éditable (si il y a) necessite un éditeur particulier pour modifier les Personnes.

  7. #7
    Invité
    Invité(e)
    Par défaut
    ok super , merci bcp

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

Discussions similaires

  1. remplir jlist a partir d'un serveur
    Par Taoufik109 dans le forum JDBC
    Réponses: 4
    Dernier message: 20/01/2009, 00h02
  2. remplir jList a partir d'une base de données
    Par Taoufik109 dans le forum Composants
    Réponses: 2
    Dernier message: 24/11/2008, 12h09
  3. Réponses: 2
    Dernier message: 26/08/2008, 15h35
  4. Faire une application Web à partir d'objets win32
    Par WebPac dans le forum Delphi .NET
    Réponses: 7
    Dernier message: 02/05/2006, 19h11
  5. [JComboBox] Remplir à partir d'un ResultSet
    Par Samanta dans le forum Composants
    Réponses: 9
    Dernier message: 27/05/2005, 16h49

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