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] Lier à une liste d'objets


Sujet :

Composants Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut [JCombobox] Lier à une liste d'objets
    Bonjour, je souhaiterai faire une petite application java de gestion avec une base de données MySql.

    Au niveau connexion, tout fonctionne, mais je me pose quelques questions sur la possibilité de lié les composants swing avec une base de données.

    Exemple : j'ai une table "utilisateur" avec un ID et un NOM.

    Je souhaiterai afficher tous les noms dans une comboBox.

    j'aurai +- ce type d'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    JComboBox comboUtilisateur = new JComboBox();
    ...			
    ResultSet resultat = instruction.executeQuery("SELECT * FROM utilisateur");
    while(resultat.next())
    {
    comboUtilisateur.addItem(resultat.getString("nomUtilisateur"));
    }
    j'aimerai ensuite lors d'un clique sur un bouton, récupérer l'ID du l'utilisateur sélectionné dans la comboBox.
    Mais pour connaître cet ID, je vais devoir effectuer une requête pour connaître l'ID en fonction du nom sélectionné.

    Bref, je vous demande si en java, il n'existe pas des composants ( genre une dataCombo ) qu'on peut lier avec une base de données pour ensuite afficher dans cette combo juste les noms mais qu'on puisse récupérer l'ID sans refaire une requête.

    Je sais que ce genre de composants existent dans d'autres langages...

    Es ce aussi possible pour java ? faut'il ajouter d'autres composants ? un framework ???

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Une solution simple serait de travailler avec des objets de type Utilisateur (id, nom). Tu rentres l'utilisateur dans la JComboBox, par défaut l'affichage utilisera la méthode toString() pour afficher l'objet (donc tu peux la définir pour qu'elle retourne le nom de celui-ci). Et tu n'auras pas de problème pour récupérer l'id car tu as un objet de type Utilisateur contient l'id.

    Après pour la gestion de la relation avec la base, il existe effectivement des framework comme Hibernate qui construisent automatique des objets contenant les informations de ta table.

  3. #3
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    Une possibilité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Utilisateur {
      private long id;
      private String nom;
      //Constructeurs, getters et setters
    }
    Et lorque tu fais ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    JComboBox comboUtilisateur = new JComboBox();
    ...			
    ResultSet resultat = instruction.executeQuery("SELECT * FROM utilisateur");
    while(resultat.next()) {
      Utilisateur user = new Utilisateur(resultat.getLong("idUtilisateur"), resultat.getString("nomUtilisateur"));
      comboUtilisateur.addItem(user);
    }
    Il te faudra redéfinir la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void setRenderer(ListCellRenderer aRenderer)
    de ta JComboBox pour afficher le nom de l'utilisateur

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Merci bien pour vos réponses, c'est une excellente idée

    Par contre, je ne comprends pas très bien comment redéfinir la méthode setRenderer

  5. #5
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Si tu avais lu ma solution qui est la même que welcome_59 sauf que je précise que par défaut l'affichage utilise la méthode toString(). Tu dois donc juste redéfinir celle-ci pour qu'elle retourne le nom de ton utilisateur. Pas la peine de définir un render spécial.

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Ok merci, j'avais effectivement lu ta solution, mais j'avais zappé le fait de redéfinir la méthode toString(), je m'étais concentré sur la redéfinition d'un render. Désolé

    Effectivement, ça fonctionne, je te remercie

  7. #7
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    Ou alors (encore mieux) tu définis ton propre 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
     
    class UtilisateurRenderer implements ListCellRenderer {
      protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
      private final static Dimension preferredSize = new Dimension(0, 20);
     
      public Component getListCellRendererComponent(JList list, Object value, int index,
          boolean isSelected, boolean cellHasFocus) {
        JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,
            isSelected, cellHasFocus);
        if (value instanceof Utilisateur) {
          renderer.setText(((Utilisateur)value).getNom());
        }
        renderer.setPreferredSize(preferredSize);
        return renderer;
      }
    }
    que tu appliqueras à ta JComboBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    JComboBox comboUtilisateur = new JComboBox();
    comboBox.setRenderer(new UtilisateurRenderer());
    ...			
    ResultSet resultat = instruction.executeQuery("SELECT * FROM utilisateur");
    while(resultat.next()) {
      Utilisateur user = new Utilisateur(resultat.getLong("idUtilisateur"), resultat.getString("nomUtilisateur"));
      comboUtilisateur.addItem(user);
    }
    Et ça devrait faire l'affaire.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/07/2010, 22h00
  2. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11
  3. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 18h38
  4. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  5. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

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