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 :

Liste déroulante avec identifiant "caché"


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut Liste déroulante avec identifiant "caché"
    Bonjour,

    Voila je voudrais faire une liste déroulante dans mon interface graphique comme celle que l'on peut voir ici:
    http://www.cs.cf.ac.uk/Dave/HCI/HCI_Handout_CALLER/combobox.gif

    Seulement voila mon pb:
    Je vais chercher des données dans ma base, par ex la table fruit:
    1, banane
    3, coco
    8, orange
    ...

    , que je stock dans un tableau [][]
    j'ai donc son identifiant et le libellé.

    Donc dans ma liste déroulante je voudrais lister les libellés, mais également les mettre en rapport avec leur identifiant de maniere a récuperer l'identifiant du fruit selectionné.

    ex: je selectionne coco.
    Je puisse recuperer la valeur 3.

    Savez vous comment faire cela??

    Merci a vous

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Soit des Object[] de taille 2, on suppose la valeur en index 0 est un Integer et la valeur en index 1 est une String. On met les objets de ce type dans une JComboBox. Pour que seule la valeur chaine soit affichée il faut mettre dans la combo un ListCellRenderer customisé, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MyListCellRenderer extends DefaultListCellRenderer {
      /** @inheritDoc
      */
      @Override public Component getListCellRendererComponent(JList list,    Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        Object[] record = (Object[])value;
        setText((String)record[1]);
        return this;
      }
    }
    Note : ce même renderer marchera également avec une JList contenant des objets de ce type.

    Pour récupérer l'ID :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int id = INVALID_ID;
    Object[] record = (Object[])myCombo.getSelectedItem();
    if (record != null) {
      id = (Integer)record[0];
    }
    Si tes ID sont toutes consécutives, croissantes et qu'il n'y pas de trou entre elles, tu peux tout simplement stocker directement tes chaines dans la JComboBox, comme ca pas la peine de mettre un renderer spécifique. Et ensuite tu fais simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int id = myCombo.getSelectedIndex();
    Note : au lieu d'un tableau tu peux aussi te faire une petite structure genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class MyValue {
     public int id;
     public String value;
    }
    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 confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    salut bouye, merci pour ton exelente reponse seulement je ne vois pas comment utiliser la classe MyListCellRenderer

    Comment fait on pour ajouter le ListCellRenderer a la combo?

    Peux tu me donner un mini exemple avec un data[][] = {{1,"banane"},{5,"tomate"}},

    Pour recup la valeur j'ai compri...

    merci beaucoup

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (Object[] row : data) {
      myCombo.addItem(row);
    }
    myCombo.setRenderer(new MyListCellRenderer());
    myCombo.setSelectedIndex(0);
    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 confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    Merci beaucoup bouye ca marche nikel chrome!!

    J'ai juste eu une petite erreur sur la ligne: for (Object[] row : data) {

    Eclipse ma proposer de convertir mon projet en 5.0 ou je ne sais plus trop quoi et ca a marché...

    Merci beaucoup!!

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Oui la syntaxe foreach n'existe que dans Java 5. Par défaut (et même si tu utilisais le JDK 1.5) ton projet devait être en mode compatibilité 1.4 (JBuilder fait pareil).
    Pour la même raison il aurait du se plaindre du cast Integer -> int.
    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

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    salut bouye,

    une derniere question,
    Y a t'il une alternative au code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Object[] row : data) { 
      myCombo.addItem(row); 
    }
    que tu m'as proposé, car l'université n'a apparement pas la derniere version , et j'ai donc des pb... De plus je ne vois pas trop comment faire...

    merci a toi

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    Personne n'a une idée???

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Pfffffffffffffffffffffffffffffffffffffffffffffffff oui mais bon la quand meme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0 ; i < data.length ; i++) {
      Object[] row = data[i];
      myCombo.addItem(row); 
    }
    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

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Par défaut
    j'avais presque trouvé

    merci pour ton aide en tous les cas!

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

Discussions similaires

  1. Liste déroulante avec 2 colonnes dont une cachée
    Par Sekigawa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 31/03/2009, 11h28
  2. liste déroulante avec données mysql
    Par fab44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/02/2005, 19h45
  3. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01

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