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

AWT/Swing Java Discussion :

Debutant java : renvoyer valeur differente de celle affichée dans jcombobox


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Par défaut Debutant java : renvoyer valeur differente de celle affichée dans jcombobox
    Bonjour,
    Je suis débutant en java, et je ne parviens pas à trouver de solution pour renvoyer une valeur différente de celle affichée dans une jcombobox.

    Exemple :

    id ---> Valeur affichée
    10 ---> Choix 1
    25 ---> Choix 2
    etc...

    Donc dans mon exemple lorsque je selectionne "Choix 1" je souhaiterais recevoir la valeur "10" en retour.

    Merci pour votre aide.

  2. #2
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    eh bien il faut passer par une méthode de convertion par derrier ta combobox ...

    Je ne sais pas si un Switch Case serais utilisable dans ton cas (surement si tu utilise des entiers... en utilisant les indice de la box peut être)
    tu devrais regarder de ce coté ^^

  3. #3
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    tu dois utiliser un renderer pour ta combobox qui va s'occuper de l'affichage.

    Tu peux par exemple créer une classe Choix

    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
     
    {
    public class Choix
    {
    	int nbr;
    	String aff;
     
    	public Choix(String aff,int nbr)
    	{
    		this.aff = aff;
    		this.nbr = nbr;	
    	}
     
    	// les get et les set ...	
    }
    Tu va créer des objets Choix avec dans aff ce que tu veux afficher et dans nbr la valeur que tu veux retourner.

    donc tu ajoutes ces objets a ta combobox au lieu d'ajouter "choix1,choix2,..."
    donc dans ton exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Choix c = new Choix("Choix1",10);
    Après il faut créer un renderer pour ta combobox pour qu'elle sache quoi afficher quand tu lui donnes des objets de la classe Choix.

    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
    public class ChoixRenderer extends JLabel implements ListCellRenderer 
    {
            private String chaine;
     
            public ComboBoxActionsRenderer() 
            {
                setOpaque(true);
                setHorizontalAlignment(LEFT);
                setVerticalAlignment(CENTER);
            }
     
            public Component getListCellRendererComponent(
                JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
            {
                if (isSelected) 
                {
                    setBackground(list.getSelectionBackground());
                    setForeground(list.getSelectionForeground());
                }
                else 
                {
                    setBackground(list.getBackground());
                    setForeground(list.getForeground());
                }
                try
                {
                    chaine = ((Choix)value).getAff();
                    this.setText(chaine);
                }
                catch(NullPointerException e)
                {
                    this.setText("");
                }
                return this;
            }
        }
    Tu fais un setRenderer(new ChoixRenderer()) sur ta jcombobox.

    et pour récupérer la valeur: ((Choix)getSelectedItem()).getNbr();

    Voila

  4. #4
    Membre expérimenté Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Par défaut
    Pour faire plus simple on peut aussi redéfinir la méthode toString dans la classe Choix ce qui permet de ne pas avoir besoin de créer un Renderer...

  5. #5
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    Citation Envoyé par Vikisme
    Pour faire plus simple on peut aussi redéfinir la méthode toString dans la classe Choix ce qui permet de ne pas avoir besoin de créer un Renderer...
    Mmmm pas bête, j'y avais jamais pensé.
    Par contre je me méfie quand même de la surcharge bricolage de méthodes qui pourraient être utilisées implicitement dans mes programmes sans que je le sache.

    Puis je trouve que c'est pas à une donnée de décider comment elle va s'afficher.

    Mais c'est vrai que c'est plus simple

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Par défaut
    Merci beaucoup pour votre aide.
    Par contre j'aimerai comprendre la solution de Vikisme.
    Qu'entends tu par
    redéfinir la méthode toString dans la classe Choix
    .

  7. #7
    Membre expérimenté Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Par défaut
    Un truc comme ç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
    public class Choix {
        int nbr;
        String aff;
     
        public Choix(String aff,int nbr) {
            this.aff = aff;
            this.nbr = nbr;	
        }
     
        // les get et les set ...	
     
     
        /* (non-Javadoc)
         * @see java.lang.Object#toString()
         */
        @Override
        public String toString() {
    	return aff;
        }
    }
    On accède de la même manière :
    ((Choix)getSelectedItem()).getNbr();
    Mais il n'y a plus besoin de Renderer. C'est sûr que c'est moins propre, mais ça marche !

  8. #8
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    La raison c'est que le Renderer par défaut d'une JComboBox utilise la méthode toString des objets de la box ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Par défaut
    Après de longues recherche et plusieurs essais infructueux et surtout grace aux pistes que vous m'avez soumises j'ai enfin trouvé une solution.
    Je vous remercie tous pour votre aide.

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

Discussions similaires

  1. Valeur du recordset non affichée dans formulaire
    Par diombo dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/10/2013, 15h59
  2. [AC-2007] Renvoyer valeur zone de liste déroulante dans requête
    Par amartik dans le forum IHM
    Réponses: 6
    Dernier message: 02/02/2010, 19h39
  3. Réponses: 2
    Dernier message: 04/07/2008, 20h11
  4. [AJAX] valeur d'un input affichée dans un select ?
    Par xoubidur dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 26/01/2008, 01h47

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