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 :

JComboBox afficher valeur id


Sujet :

Composants Java

  1. #1
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut JComboBox afficher valeur id
    Bonjour , j'utilise Java swing et un composant menu déroulant JComboBox.
    Maintenant , cette liste m'affiche des noms de personne. mais j'aimerais qu'il me retourne l'ID de la personne.

    Admettons je veux faire

    1=> Remi
    2=> Julien

    La liste va afficher Remi , Julien mais j'aimerais qu'il me retourne 1 ou 2 quand je clique le bouton.

    http://java.sun.com/docs/books/tutor.../combobox.html

    Je ne vois pas de getValue mais seulement getValue.
    Et je ne sais pas comment initialiser ce menu déroulant à "double entrée".
    J'imagine qu'il faille utiliser setSelectedItem et getSelectedItem de ComboBoxModel.

    merci.

  2. #2
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    ou sinon, je vois qu'on peut utiliser des Item mais je n'arrive pas à recupérer la valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      date = "lundi 26 mai";
                item = new Item(1, date);
                item.setValue("123");
                filterDateComboBox.addItem( item );
    mais ensuite je ne sais pas comment récupérer la value !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      date =  ( listeInvites.dateRadioButton.isSelected()) ? (listeInvites.filterDateComboBox.getSelectedItem().toString())  : "0";
    Me récupère lundi 26 mai au lieu de 123.

  3. #3
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    En fait tu peux mettre n'importe quel objet dans une JComboBox. Tu peux soit utiliser une renderer pour gérer l'affichage, soit, si l'affichage consiste seulement en du texte, redéfinir la méthode toString() qui sera la chaine afficher dans la liste de la combo.

    j'écris le code de mémoire.

    Ma classe qui gère mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class NomID {
     
         private String nom;
         private int id;
     
         // écrire ensuite les constructeurs/accesseurs/manipulateurs
     
         // on redéfinit toString qui renverra le nom, afin qu'il
         // s'affiche dans la combo (ou on écrit un renderer)
         public String toString() {
              return nom;
         }
    }
    Ajouter les items à la combo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JComboBox combo = new JComboBox();
    NomID nom1 = new NomID("Zeus", 11);
    NomID nom2 = new NomID("Poseidon", 17);
    combo.addItem(nom1);
    combo.addItem(nom2);
    Récupérer l'ID sélectionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomID nomSelection = (NomID) combo.getSelectedItem();

  4. #4
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    J'ai une question concernant ton code.
    qu'est ce qui me dit ou fait que ici dans ce code c'est Zeus et Poseidon qui sera affiché dans la liste?

    NewClass
    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
    import java.awt.event.ActionEvent;
     
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JList;
     
    public class NewClass {
     
     
       static  JComboBox combo;
     
      public static void main(String[] a) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        combo = new JComboBox();
        NomID nom1 = new NomID("Zeus", 11);
        NomID nom2 = new NomID("Poseidon", 17);
        combo.addItem(nom1);
        combo.addItem(nom2);
     
        JButton jButton1 = new JButton();
     
     
        jButton1.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            NomID nomSelection = (NomID) combo.getSelectedItem();
            System.out.println(nomSelection);
          }
        });
     
     
        frame.add(jButton1);
        frame.add(combo);
     
     
        frame.setSize(300, 200);
        frame.setVisible(true);
      }
     
    }
    NomID
    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
    public class NomID {
     
        public NomID(String nom, int id) {
            this.nom = nom;
            this.id = id;
        }
     
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        public String getNom() {
            return nom;
        }
     
        public void setNom(String nom) {
            this.nom = nom;
        }
     
         private String nom;
         private int id;
     
         // écrire ensuite les constructeurs/accesseurs/manipulateurs
     
         // on redéfinit toString qui renverra le nom, afin qu'il
         // s'affiche dans la combo (ou on écrit un renderer)
         public String toString() {
              return new Integer(id).toString();
         }
    }
    Je ne parviens pas à :
    afficher dans le menu déroulant le nom du dieu et récupérer son id.

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et si tu veux faire encore plus propre tu vires le toString de la classe NomId et tu écris un renderer digne de ce nom pour ta JComboBox

    http://java.sun.com/docs/books/tutor....html#renderer
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    le Renderer ne concerne pas un tableau? ou les couleurs?
    Je n'arrive pas à l'utiliser.
    Pourtant je pensais que KEY => VALUE serait facile et classique

  7. #7
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    J'ai donc créé un objet dédié:

    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
    package com.fft.tribune;
    
    public class DateID {
    
        public DateID(String valeur, int id) {
            this.valeur = valeur;
            this.id = id;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getValeur() {
            return valeur;
        }
    
        public void setValeur(String valeur) {
            this.valeur = valeur;
        }
    
         private String valeur;
         private int id;
    
         // écrire ensuite les constructeurs/accesseurs/manipulateurs
    
         // on redéfinit toString qui renverra le nom, afin qu'il
         // s'affiche dans la combo (ou on écrit un renderer)
         public String toString() {
              return new Integer(id).toString();
         }
    }

    Dans la Frame où j'affiche le menu déroulant, voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        String query =  "select CAL_DATE_JOUR,CAL_TP_NB_PLACE, CAL_JOUR "+
                            "from T_CAL "+
                            "where (CAL_TP_ACTIF is null or CAL_TP_ACTIF <> 1) "+
                            "and CAL_EVT_ID = '" + 
                            ContextSingleton.getInstance().getEventId() +  
                            "'";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Vector v = null;
    
            for (int i=0; i<data.size(); i++) {
                v = (Vector)data.elementAt(i);
                str = (String)v.elementAt(0);
                cal_jour = (String)v.elementAt(2);
                utilDate = java.sql.Date.valueOf(str.substring(0,10));
                formatter.applyPattern("EEEE dd MMMM");
                date = formatter.format(utilDate);
    
                filterDateComboBox.addItem(  new DateID(str,new Integer(cal_jour).intValue()));
    
    
            }
    Sauf que à l'affichage ca m'affiche l'ID au lieu du nom du jour (str) donc ça m'échappe totalement

  8. #8
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Le principe est d'utiliser un objet répondant à ta problématique (un nom associé à un id d'après ce que j'ai compris, ce que tu appel key -> value).
    Ensuite tu alimente ta combo avec ces objets (ou ton modèle).
    Enfin tu as un renderer qui lui ne s'occupe que de la manière dont ces objets s'afficheront dans la liste de la combo.
    Quand tu récupère l'objet sélectionné de la combo tu récupère une instance de l'objet défini (key -> value), il faut faire un transtypage car tu récupère un Object.

    qu'est ce qui me dit ou fait que ici dans ce code c'est Zeus et Poseidon qui sera affiché dans la liste?
    La méthode toString(). Sinon comme sinok le fait remarquer c'est mieux d'utiliser un renderer car c'est un peu détourner l'usage de toString().

  9. #9
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Voici un exemple concret :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    import java.awt.Component;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JList;
     
    public class Exemple {
     
    	public static void main(String[] args) {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JComboBox combo = new JComboBox();
    		combo.setRenderer(new MyRenderer());
     
    		NomId item1 = new NomId("item1", 0);
    		NomId item2 = new NomId("item2", 1);
    		NomId item3 = new NomId("item3", 2);
     
    		combo.addItem(item1);
    		combo.addItem(item2);
    		combo.addItem(item3);
     
    		combo.addItemListener(new ItemListener() {			
    			@Override
    			public void itemStateChanged(ItemEvent e) {
    				if (e.getStateChange() == ItemEvent.SELECTED) {
    					NomId nomId = (NomId) e.getItem();
    					System.out.println("tu as sélectionné " + nomId + " ("
    						+ nomId.getNom() + ", " + nomId.getId() + ")");
    				}
    			}
    		});
     
    		f.add(combo);
    		f.pack();
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
    }
     
    class NomId {
     
    	private String nom;
    	private int id;
     
    	public NomId(String nom, int id) {
    		this.nom = nom;
    		this.id = id;
    	}
     
    	public String getNom() {
    		return this.nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public int getId() {
    		return this.id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    }
     
    class MyRenderer extends DefaultListCellRenderer {
     
    	@Override
    	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    		super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
     
    		NomId nomId = (NomId) value;
     
    		setText(nomId.getNom());
     
    		return this;
    	}
     
    }

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

Discussions similaires

  1. JCombobox problème valeur affichée
    Par alfhcg dans le forum Composants
    Réponses: 4
    Dernier message: 24/10/2012, 15h52
  2. Afficher valeur vector sans doublon
    Par splouf dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 18/12/2006, 16h02
  3. [PHP-JS] Afficher valeur booleen
    Par taki_38 dans le forum Langage
    Réponses: 3
    Dernier message: 13/07/2006, 11h02
  4. Jcombobox suppression valeur
    Par lazzeroni dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 12/05/2006, 16h48
  5. afficher valeur de max()
    Par bobic dans le forum ASP
    Réponses: 2
    Dernier message: 07/09/2005, 14h00

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