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

JDBC Java Discussion :

Remplir Un Combobox à partir d'un Autre


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Remplir Un Combobox à partir d'un Autre
    Bonjour,
    je suis jeune étudiant, je suis bloqué dans mon application java Swing. Mon problème, j'ai utilise deux combo box l'un pour afficher les région et l'autre pour afficher les départements d'une région choisit dans le 1ére combo box.
    EXEMPLE: Si l'utilisateur choisit dans le combo box Région= France
    le combo box département remplit automatiquement =Paris
    Marseille
    etc...
    Voici Mon code ( utilise netbeans):
    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
    jComboBox1.addItem("----");
            String query1 = "SELECT nomregion FROM region";
           pst=getCon().prepareStatement(query1);
            ResultSet rs1 = pst.executeQuery();
     
            while(rs1.next()) {
               jComboBox1.addItem(rs1.getString("nomregion"));
            }
         jComboBox1.addActionListener(new ActionListener() {
     
             public void actionPerformed(ActionEvent ae) {
     
                   String comboBox1Selected=jComboBox1.getSelectedItem().toString();
                    try{
     
                        String query2 = "SELECT nomdepartement FROM departement, region where "+comboBox1Selected+"";
                        pst=getCon().prepareStatement(query2);
                        ResultSet rs2 = pst.executeQuery();
                  jComboBox2.removeAllItems(); 
                        while(rs2.next()) {jComboBox2.addItem(rs2.getString("nomdepartement"));}
                        JOptionPane.showMessageDialog(null,"nomdepartement");
                    }
                    catch (SQLException ex1) {JOptionPane.showMessageDialog(null,"Erreur"+ex1.getLocalizedMessage()); ex1.printStackTrace();
                        return;}
     
     
                }
             });
    Merci d'avance,

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le problème est dans ta requête :

    1. Il y a une erreur de syntaxe : c'est "select machin from table where champ = valeur"
    2. une chaine de caractères doit être quotées (et d'une façon qui dépend du SGBD). En fait, comme tu utilises un PreparedStatement, tu devrais plutôt écrire :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      String query2 = "SELECT nomdepartement FROM departement where region = ?";
      pst=getCon().prepareStatement(query2);
      pst.setString(1, comboBox1Selected );
      Ce qui t'évite justement d'avoir à te soucier des quotes (JDBC gèrera ça pour toi).



    En revanche, il y a un gros soucis dans ton code : tu ne libères pas tes ResultSet : il faut toujours appeler close() après l'avoir lu, pour libérer les ressources qu'il a créé en mémoire. Libérer le ResultSet aurait également pour effet de libérer le PreparedStatement qui l'a généré.

    Par ailleurs, ne recycle pas tes variables : ne déclare pas une variable pst pour plusieurs requêtes. Utilise une variable différente pour chaque statement, limitée au scope dont elle a besoin.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci joel.drigo

    Après modification (quand je choisie la région(mon premier combobox) j'ai ce message d'erreur :
    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at GestionTablett.TestCombo$1.actionPerformed(TestCombo.java:44)
    	at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1260)
    	at javax.swing.JComboBox.setSelectedItem(JComboBox.java:588)
    	at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)
    	at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:835)
    	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    	at java.awt.Component.processMouseEvent(Component.java:6516)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    	at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:499)
    	at java.awt.Component.processEvent(Component.java:6281)
    	at java.awt.Container.processEvent(Container.java:2229)
    	at java.awt.Component.dispatchEventImpl(Component.java:4872)
    	at java.awt.Container.dispatchEventImpl(Container.java:2287)
    	at java.awt.Component.dispatchEvent(Component.java:4698)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    	at java.awt.Container.dispatchEventImpl(Container.java:2273)
    	at java.awt.Window.dispatchEventImpl(Window.java:2719)
    	at java.awt.Component.dispatchEvent(Component.java:4698)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
    	at java.awt.EventQueue.access$300(EventQueue.java:103)
    	at java.awt.EventQueue$3.run(EventQueue.java:706)
    	at java.awt.EventQueue$3.run(EventQueue.java:704)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    	at java.awt.EventQueue$4.run(EventQueue.java:720)
    	at java.awt.EventQueue$4.run(EventQueue.java:718)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    Voici le code après Modification :
    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
    PreparedStatement pst;
    ResultSet rs;
    ResultSet rst;
     
        public TestCombo() throws SQLException {
            initComponents();
     jComboBox1.addItem("----");
            String query1 = "SELECT nomregion FROM region";
           pst=getCon().prepareStatement(query1);
            ResultSet rst = pst.executeQuery();
             while(rst.next()) {
               jComboBox1.addItem(rst.getString("nomregion"));
     
            }
         jComboBox1.addActionListener(new ActionListener() {
     
             public void actionPerformed(ActionEvent ae) {
     
                   String comboBox1Selected=jComboBox1.getSelectedItem().toString();
                    try{
     
                     String query2 = "SELECT nomdepartement FROM departement where region = ?";
                    pst=getCon().prepareStatement(query2);
                    pst.setString(1, comboBox1Selected );
     
                  jComboBox2.removeAllItems(); 
                        while(rs.next()) {
                        jComboBox2.addItem(rs.getString("nomdepartement"));}
     
                        rs.close();
                    }
                    catch (SQLException ex1) {JOptionPane.showMessageDialog(null,"Erreur"+ex1.getLocalizedMessage()); ex1.printStackTrace();
                        return;}
     
     
                }
             });
        }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String query2 = "SELECT nomdepartement FROM departement where region = ?";
    pst=getCon().prepareStatement(query2);
    pst.setString(1, comboBox1Selected );
                  jComboBox2.removeAllItems(); 
                        while(rs.next()) {
                        jComboBox2.addItem(rs.getString("nomdepartement"));}
    Ici, tu ne fais pas d'executeQuery avec query2 : en conséquence, rs correspond au resultat de query1 et donc n'a probablement pas de champ nomdepartement, d'où la NullPointerException. Tu n'aurais pas eu ce problème, ou du moins tu l'aurais vu rapidement si tu ne recyclais pas tes variables, comme je te l'ai déjà fait remarqué.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Beaucoup pour le soutien, je suis vraiment confus car ce programme me bloc gravement.
    jai fait toute les modification mais en vain. sa ne marche toujour pas car dans le combo departement il n'affiche rien

    Mon code
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    package GestionTablett;
     
    import static GestionTablett.Connecter.getCon;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JOptionPane;
     
    public class TestCombo extends javax.swing.JFrame {
    PreparedStatement pst;
    ResultSet rs;
    ResultSet rst;
     
        public TestCombo() throws SQLException {
            initComponents();
     jComboBox1.addItem("----");
            String query1 = "SELECT DISTINCT nomregion FROM region";
           pst=getCon().prepareStatement(query1);
            ResultSet rst = pst.executeQuery();
             while(rst.next()) {
               jComboBox1.addItem(rst.getString("nomregion"));
                                  }
             rst.close();
     
         jComboBox1.addActionListener(new ActionListener() {
     
        @Override
        public void actionPerformed(ActionEvent ae) {
     
                   String comboBox1Selected=jComboBox1.getSelectedItem().toString();
     
                   try{
                     String query2 = "SELECT nomdepartement FROM departement, region where iddepartement = ?";
                     pst=getCon().prepareStatement(query2);
                     pst.setString(1, comboBox1Selected );
                     ResultSet rs = pst.executeQuery();
               //      jComboBox2.removeAllItems();
                     while(rs.next()) {
                     jComboBox2.addItem(rs.getString("nomdepartement"));}
                              }
     
                     catch (SQLException ex1) {JOptionPane.showMessageDialog(null,"Erreur"+ex1.getLocalizedMessage());  return;}
     
        }
                                                                  });
                                     }
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jComboBox1 = new javax.swing.JComboBox<>();
            jComboBox2 = new javax.swing.JComboBox<>();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(102, 102, 102)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jComboBox1, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jComboBox2, 0, 195, Short.MAX_VALUE))
                    .addContainerGap(173, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(30, 30, 30)
                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(55, 55, 55)
                    .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(55, Short.MAX_VALUE))
            );
     
            pack();
        }// </editor-fold>                        
     
        public static void main(String args[]) {
     
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        new TestCombo().setVisible(true);
                    } catch (SQLException ex) {
                        Logger.getLogger(TestCombo.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JComboBox<String> jComboBox1;
        private javax.swing.JComboBox<String> jComboBox2;
        // End of variables declaration                   
    }
    Ma base:

    Region

    idregion int (11) primary key
    nomregion varchar (25);

    Departement

    1 iddepartement int(11) primary key
    2 nomdepartement varchar(65)
    3 idregion int(11)


    Vraiment votre aide précieux

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    L'erreur est dans ta requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query2 = "SELECT nomdepartement FROM departement, region where iddepartement = ?";
    Tu cherches les départements dans departement, pour une région sélectionnée, donc le test ne se fait pas sur iddepartement. Le problème, c'est que dans ta première requête tu ne sélectionnes que le nom du département. C'est un peu plus compliqué de le faire, parce qu'il faut changer le modèle de la combo et le renderer.

    Mais on peut le faire sur le nom de la région (à priori, il y a peu de risque qu'il y ait 2 régions avec le même nom), mais ce n'est pas la façon la plus clean et ça ne marchera pas dans beaucoup d'autre cas.

    Donc, il faut que tu sélectionnes les départements sur le nom d'une région, et non son id : donc il va te falloir faire une jointure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query2 = "SELECT nomdepartement FROM departement, region where departement.idregion = region.idregion and region.nomregion = ?";
    Je n'ai pas le temps maintenant, mais je te montrerai comment le faire proprement (en passant donc par les id), surtout qu'il y a le même problème avec les départements : quand tu vas sélectionner un département, tu auras son nom, pas son id, et il est probable que tu aies besoin de son id pour faire le reste.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Remerciement
    Un trés Grand Merci à joel.drigo
    sa marche bien .

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour Joel, j'aimerai savoir toujour dans le meme code ( en haut) si je voulais integrer les communes ( c'est à dire les commune liés aux departements ) on aura donc quant on selectionne le departement , les commune qui sont rattacher au departement : Comment faire

    -faut il creer un autre listener pour gerer la commune? Ou bien
    - il faut integrer tout dans un seul listener celui de departement?

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mamadoulamine1799 Voir le message
    - il faut integrer tout dans un seul listener celui de departement?
    Oui, sur le même principe, en mettant un listener sur la combo de départements. Dans le listener de la combo de région, il faudra juste initialiser la sélection sur la seconde combo (de département) et éventuellement remplir la troisième en fonction (rien sélectionné, ou premier département, ou département par défaut...)

    C'est là que ça devient important de pouvoir traiter tout par id plutôt que par nom.

    Pour le faire, au lieu de mettre des noms dans les combos, tu peux simplement faire une petite classe qui wrappe l'id et le nom ; par exemple :
    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
    public class DBObject {
         private final String id; // ou int, selon ton modèle de DB
         private final String nom;
     
         public DBObject(String id, String nom) {
              this.id=id;
              this.nom=nom;
         }
         public String getId() {
              return id;
         }
         public String getNom() {
              return nom;
         }
         public String toString() {
              return nom;
         }
    }
    Tu peux si tu veux faire des objets spécifiques si tu veux gérer d'autres propriétés spécifiques (genre public class Region extends DBObject {}Tu déclares les combo comme çà : private javax.swing.JComboBox<DBObject> jComboBox1. Et tu les remplis simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String query1 = "SELECT DISTINCT idregion, nomregion FROM region";
           try(PreparedStatement pst=getCon().prepareStatement(query1)) {
            ResultSet rst = pst.executeQuery();
             while(rst.next()) {
               jComboBox1.addItem(new DBObject(rst.getString("idregion"),rst.getString("nomregion")));
                                  }
           }
    Ensuite, pour récupérer la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBObject comboBox1Selected = (DBObject)jComboBox1.getSelectedItem();
    Ce qui fera que tu pourras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String query2 = "SELECT iddepartement, nomdepartement FROM departement where idregion = ?";
                try(PreparedStatement pst=getCon().prepareStatement(query2)) {
                     pst.setString(1, comboBox1Selected.getId() );
    /* ... */
    Et de même pour la commune ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DBObject comboBox2Selected = (DBObject)jComboBox2.getSelectedItem();
    /* ... */
     
    String query3 = "SELECT idcommune, nomcommune FROM communes where iddepartement = ?";
                try(PreparedStatement pst=getCon().prepareStatement(query3)) {
                     pst.setString(1, comboBox2Selected.getId() );
    /* ... */
    Si tu as une double clef (idregion aussi dans communes), étend DBObject en Departement en ajoutant l'id de region en attribut, ce qui te permet de le récupérer pour faire la requête.

    Regarde ici éventuellement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Salut JOEl, merci pour la réponse qui peut m'aider
    Mais j'ai toujours des problèmes:

    1. je veux remplir les combo de région a Arrondissement et avoir les habitants de chaque Arrondissement choisie
    2. mais j'ais pas créer de classe région, département , etc..., je n'ais que mon programme et la connection a la base de donnees
    3. j'ai creer l'objet indiquer et jai finalement creer un classe test region ainsi que la classe OBDject que vous avez definie plus en haut
    4. mais sa ne passe pas
    5. JE VOUS DEMANDE DE DECRIRE S'IL VOUS PLAIT LES DIFFERENT ETAT QUI DOIVENT ME PERMETTRE D'OBTENIR UN RESULTAT


    Merci D'avance

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par mamadoulamine1799 Voir le message
    [*]mais sa ne passe pas
    Mais encore, précisemment ?


    Voici un exemple opérationnel (je simule juste la base, mais je me suis arrangé pour les les noms soient ressemblant à ce qu'on ferait en JDBC (pas la peine que tu regardes le détail de la classe Database donc) :

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    public class JComboDemo {
     
    	public static void main(String[] args) {
     
    		// simule une base
    		Database database = new Database();
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JComboBox<DBObject> regionCombo = new JComboBox<>();
    		JComboBox<DBObject> depaCombo = new JComboBox<>();
     
     
    		// remplissage 
    		Database.ResultSet<?> resultSetRegion = database.selectRegions();
    		while( resultSetRegion.hasNext() ) {
    			regionCombo.addItem(new DBObject(resultSetRegion.getString("id"), resultSetRegion.getString("name")));
    		}
    		fillCombo(depaCombo, regionCombo, database);
    		regionCombo.addActionListener(e-> {
    			depaCombo.removeAllItems();
    			fillCombo(depaCombo, regionCombo, database);
    		}); 
     
    		JPanel panel = new JPanel();
    		panel.add(regionCombo);
    		panel.add(depaCombo);
     
    		frame.add(panel);
    		new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
    		frame.setSize(300, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static void fillCombo(JComboBox<DBObject> depaCombo, JComboBox<DBObject> regionCombo, Database database) {
    		DBObject region = (DBObject) regionCombo.getSelectedItem(); 
     
    		Database.ResultSet<?> resultSetDepartement = database.selectDepartementsWhere(region.getId());
    		while( resultSetDepartement.hasNext() ) {
    			depaCombo.addItem(new DBObject(resultSetDepartement.getString("id"), resultSetDepartement.getString("name")));
    		}
     
    	}
     
    	public static class DBObject {
     
    		private final String id;
    		private final String name;
     
    		public DBObject(String id, String name) {
    			this.id = id;
    			this.name = name;
    		}
     
    		public String getId() {
    			return id;
    		}
     
    		public String getName() {
    			return name;
    		}
     
    		@Override
    		public String toString() {
    			return name;
    		}
     
    	}
     
    	public static class Database {
     
    		private static class Region {
     
    			public final String id;
    			public final String name;
     
    			public Region(String id, String name) {
    				this.id = id;
    				this.name = name;
    			}
    		}
     
    		private static class Departement {
     
    			public final String id;
    			public final String name;
    			public final String regionId;
     
    			public Departement(String id, String name, String regionId) {
    				this.id = id;
    				this.name = name;
    				this.regionId = regionId;
    			}
    		}
     
    		public static abstract class ResultSet<T> {
    			private final Iterator<T> iterator;
    			private T next;
     
    			public ResultSet(Iterator<T> iterator) {
    				this.iterator=iterator;
    			}
     
    			public abstract String getString(String col);
     
    			public boolean hasNext() {
    				if ( iterator.hasNext() ) {
    					next = iterator.next();
    					return true;
    				}
    				next=null;
    				return false;
    			}
     
    			protected T current() {
    				return next;
    			}
     
    		}
     
    		public static class RegionResultSet extends ResultSet<Region> {
    			public RegionResultSet(Iterator<Region> regions) {
    				super(regions);
    			}
     
    			@Override
    			public String getString(String col) {
    				Region record = current();
    				if ( record!=null ) {
    					switch(col) {
    					case "id":
    						return record.id;
    					case "name":
    					    return record.name;
    					default:
    						throw new IllegalStateException("Unknown column "+col);
    					}
    				}
    				throw new IllegalStateException("No such records...");
    			}
     
    		}
     
    		public static class DepartementResultSet extends ResultSet<Departement> {
    			public DepartementResultSet(Iterator<Departement> departements) {
    				super(departements);
    			}
     
    			@Override
    			public String getString(String col) {
    				Departement record = current();
    				if ( record!=null ) {
    					switch(col) {
    					case "id":
    						return record.id;
    					case "name":
    					    return record.name;
    					default:
    						throw new IllegalStateException("Unknown column "+col);
    					}
    				}
    				throw new IllegalStateException("No such records...");
    			}
     
    		}
     
    		private final List<Region> regions;
    		private final List<Departement> departements;
     
    		public Database() {
    			regions = Collections.unmodifiableList(Stream.iterate(1, id -> id + 1).limit(5)
    					.map(id -> new Region(String.valueOf(id), "Region " + id)).collect(Collectors.toList()));
     
    			departements = Collections
    					.unmodifiableList(
    							regions.stream()
    									.flatMap(region -> Stream.iterate(Integer.parseInt(region.id) * 5, id -> id + 1)
    															 .limit(5)
    															 .map(id -> new Departement(String.valueOf(id), "Departement " + id + "("+region.name+")",region.id))
    															 .collect(Collectors.toList()).stream())
    									.collect(Collectors.toList()));
     
    		}
     
    		public ResultSet<?> selectDepartementsWhere(String id) {
    			return new DepartementResultSet(departements.stream()
    					                                   .filter(departement-> departement.regionId.equals(id))
    					                                   .collect(Collectors.toList())
    					                                   .iterator());
    		}
     
    		public ResultSet<?> selectRegions() {
    			return new RegionResultSet(regions.iterator());
    		}
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Remplir une comboBox à partir d'une autre combobox
    Par karnass dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/03/2013, 15h22
  2. [Débutant] combobox dynamique :Remplir un Combobox à partir d'un autre Combobox
    Par koloban dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/04/2012, 22h21
  3. Réponses: 2
    Dernier message: 21/03/2012, 10h21
  4. Réponses: 1
    Dernier message: 23/05/2007, 11h49
  5. remplir un champs à partir d'un autre champ
    Par Claire07 dans le forum Access
    Réponses: 4
    Dernier message: 19/06/2006, 12h50

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