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 :

[JComboBox] Fonction setSelectedItem


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 8
    Points : 12
    Points
    12
    Par défaut [JComboBox] Fonction setSelectedItem
    J'ai une question ambigüe pour moi et j'espère que quelqu'un aura un soupçon de solution.
    J'utilise un JComboBox que je remplis avec des objets d'une classe métier.
    J'ai implémenté la fonction toString et ainsi je récupère des objets lorsque l'on sélectionne l'un deux.
    Par contre dans l'autre sens cela fonctionne moins bien. La fonctione setSelectedItem ne veut pas sélectionner l'élément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class PanelLieu extends JPanel{
    private JComboBox lieuRendezVous;
    (...)
    public void setSelectedLieu(Lieu lieu){
    		lieuRendezVous.setSelectedItem(lieu);		
    	}
    Ma question est donc: est-ce qu'il existe une fonction à implémenter dans la classe métier pour que la sélection se fasse aisément et proprement (j'ai pensé à la fonction equals peut-être)
    Ou bien je dois faire un vulgaire algo de recherche pour sélectionner l'élément dans le composant...

    Merci d'avance pour tout réponse...

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: [JComboBox] Fonction setSelectedItem
    Salut,

    En effet il faut que tu implémentes la méthode equals() afin qu'elle retourne true lorsque les deux objets sont identiques...
    Par défaut la méthode equals() hérité d'Object ne renvoit true que si les deux objets ont la même référence... Mais aucune comparaison du contenu de l'objet n'est faite...

    a++

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 8
    Points : 12
    Points
    12
    Par défaut
    Cela marche mais il faut réellement implémenter la fonction equals(Object) et non avec le type de la classe en paramètre. (C'est ce que j'avais fait au début)
    Je donne pour exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public boolean equals(Object arg0) {
      if(arg0!=null)
          return ((((Lieu)arg0).IdLieu).equals(this.IdLieu));
      else
          return false;
    }
    Merci beaucoup !

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    En effet, equals(Lieu) ne redéfinit pas equals(Object) et n'est donc pas appellée par la JComboBox...

    Sinon pour equals() je te conseille plutôt quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public boolean equals(Object arg) {
            if (this==arg) {
                return true;
            } else if (arg instanceof Lieu) {
                return ((((Lieu)arg).IdLieu).equals(this.IdLieu));
            }
            return false;
        }
    Le this==arg permet d'éviter d'appeller la méthode equals() sur le champ s'il s'agit de la même instance de l'objet (ils sont donc forcément identique).
    Le instanceof permet de s'assurer que l'objet passé en paramètre est bien du type lieu. Cela permet d'éviter un ClassCastException si ce n'est pas le cas (par exemple si ta JComboBox comporte d'autres types d'objets). Tu n'as pas besoin de tester la valeur null car dans ce cas instanceof te renverra false...

    Enfin, on utilise généralement une lettre minuscule comme premier lettre du nom des champs/variables/paramètres (IdLieu -> idLieu). C'est une bonne habitude à prendre car ton code devient plus lisible pour les autres...

    a++

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    La methode equals() s'implemente dans ce cas dans la classe lieu.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/07/2013, 20h28
  2. [JComboBox] Filtrage automatique en fonction de la saisie
    Par donnadieujulien dans le forum Composants
    Réponses: 2
    Dernier message: 24/09/2011, 14h31
  3. Charger JList en fonction de selection JComboBox
    Par grospatapouf dans le forum Composants
    Réponses: 4
    Dernier message: 16/11/2008, 22h15
  4. [JComboBox] probleme de setSelectedItem
    Par thaundeadboss dans le forum Composants
    Réponses: 5
    Dernier message: 22/06/2008, 18h38
  5. Réponses: 4
    Dernier message: 10/05/2007, 15h41

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