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 :

Remplir une combobox en lien avec une autre combobox


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut Remplir une combobox en lien avec une autre combobox
    Bonjour,

    Je travaille actuellement sur une petite application permettant l'ajout des operateurs dans une base de données pour ensuite être payer. Pour alimenter mes combo-box je fais des requêtes dans une base existante jusque la pas de soucis.
    Je souhaiterais que lorsque je sélectionne le matricule de la personne , la combo-box "nom" se remplisse automatiquement par rapport au matricule ?

    Une autre petite question est il possible d'afficher la SectionSalarie, et le Libelle dans : comboBox_1.addItem(rs.getString("SectionSalarie"));

    "SELECT DISTINCT SectionSalarie,Libelle FROM SectionSalarie"

    Table SectionSalarie :
    id
    SectionSalarie
    Libelle

    Table Salarie:
    ID
    matricule
    NomPrenomSalarie
    sectionsalarie


    Voici le code de ma Jframe avec mes combo-box.

    Merci beaucoup

    Alexandre

    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
     
     
    JComboBox comboBox_3 = new JComboBox(new DefaultComboBoxModel());
    		comboBox_3.setBounds(279, 149, 160, 20);
    		frmSaisieDesHeures.getContentPane().add(comboBox_3);
    		PreparedStatement stmt = null;
    		ResultSet rs = null;
     
    		try {
    			stmt = Connexion_BDD.get().prepareStatement("SELECT NomPrenomSalarie FROM SalariesPresents");
     
    			rs = stmt.executeQuery();
     
    			while (rs.next()) {
     
    				comboBox_3.addItem(rs.getString("NomPrenomSalarie"));
    			}
    		} catch (SQLException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
     
    		JComboBox comboBox_2 = new JComboBox();
    		comboBox_2.setBounds(81, 149, 113, 20);
    		frmSaisieDesHeures.getContentPane().add(comboBox_2);
     
    		try {
    			stmt = Connexion_BDD.get().prepareStatement("SELECT Matricule FROM MOD_SalariesPresents");
     
    			rs = stmt.executeQuery();
     
    			while (rs.next()) {
     
    				comboBox_2.addItem(rs.getString("Matricule"));
    			}
    		} catch (SQLException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
     
    		JComboBox comboBox_1 = new JComboBox();
    		comboBox_1.setBounds(530, 149, 135, 20);
    		frmSaisieDesHeures.getContentPane().add(comboBox_1);
    		try {
    			stmt = Connexion_BDD.get().prepareStatement("SELECT DISTINCT SectionSalarie,Libelle FROM MOD_SectionSalarie ");
     
    			rs = stmt.executeQuery();
     
    			while (rs.next()) {
     
    				comboBox_1.addItem(rs.getString("SectionSalarie"));
    			}     
     
     
    		} catch (SQLException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour le lien des combos, tu peux regarder l'exemple dans ce post.

    Pour l'affichage, utilise un ListCellRenderer. Exemple avec extension de DefaultListCellRenderer :

    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
    public class DemoListCellRenderer {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		MyObject[] data = {
    				new MyObject(1, "Marie", "Directeur de projet"),
    				new MyObject(1, "Paul", "Chef de projet"),
    				new MyObject(1, "Caroline", "Développeur"),
    				new MyObject(1, "Marc", "Développeur"),
    		};
     
    		JComboBox<MyObject> combo = new JComboBox<>(data);
    		combo.setRenderer(new DefaultListCellRenderer() {
     
    			@Override
    			public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
    					boolean cellHasFocus) {
     
    				if ( value instanceof MyObject ) {
    					MyObject object = (MyObject) value;
    					setText(object.name+" ("+object.type+")");
    				}
     
    				 return this;
    			}
     
     
    		});
     
    		combo.addActionListener(e-> afficheSelection(combo.getSelectedItem()));
     
    		frame.add(combo, BorderLayout.SOUTH);
    		frame.setSize(300, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
     
    	private static void afficheSelection(Object selectedItem) {
    		if ( selectedItem instanceof MyObject ) {
    			System.out.println("Object sélectionné : " + ((MyObject)selectedItem).id + "-" + ((MyObject)selectedItem).name);
    		}
    	}
     
     
    	public static class MyObject {
    		public final int id;
    		public final String name;
    		public final String type;
    		public MyObject(int id, String name, String type) {
    			this.id=id;
    			this.name=name;
    			this.type=type;
    		}
     
    	}
     
    }
    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
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut
    merci pour votre réponse,

    j'ai déjà regardé se post mais je n'arrive pas à le mettre en place dans mon code. Avec l'id on ne peut pas simplifier les choses ?

    et pour l'affichage , vous mettez des valeurs en dur dans votre Object data , moi c'est ma requête qui va chercher les données donc comment mettre sa dans mon code ?

    merci

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Alex1407 Voir le message
    j'ai déjà regardé se post mais je n'arrive pas à le mettre en place dans mon code. Avec l'id on ne peut pas simplifier les choses ?
    Le fait de créer une classe qui représente ce que tu récupères de ta base simplifie les choses : tu ne manipules plus des trucs qui se baladent séparement ou un tableau.
    Il te faudrait effectivement l'id dans la requête, parce que ça te permettra de retrouver ton élément dans la table (avec un where sur l'id, et non un where sur un nom qui pourrait être dupliqué)
    Citation Envoyé par Alex1407 Voir le message
    et pour l'affichage , vous mettez des valeurs en dur dans votre Object data , moi c'est ma requête qui va chercher les données donc comment mettre sa dans mon code ?
    C'est pareil, au lieu de passer une String constante, tu passes les résultats de ResultSet.getString("champ truc") en argument.

    Avec ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stmt = Connexion_BDD.get().prepareStatement("SELECT DISTINCT id,SectionSalarie,Libelle FROM MOD_SectionSalarie ");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rs = stmt.executeQuery();
     
    			while (rs.next()) {
     
    				comboBox_3.addItem(new SectionSalarie(rs.getString("id"), rs.getString("SectionSalarie"), rs.getString("Libelle"));
    			}
    Difficile de faire plus simple.
    Au passage, tu ne fermes ni ton ResultSet, ni ton Statement ! Il faut absolument le faire. Avec un try-with-resource, ce simple(et il vaut mieux utiliser des variables locales au lieu de recycler) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try(PreparedStatement stmt = Connexion_BDD.get().prepareStatement("SELECT DISTINCT id,SectionSalarie,Libelle FROM MOD_SectionSalarie ")) {
       ResultSet rs = stmt.executeQuery();
     
       while (rs.next()) {
           comboBox_3.addItem(new SectionSalarie(rs.getString("id"), rs.getString("SectionSalarie"), rs.getString("Libelle"));
       }
     
    }
    catch(SQLException e) {
       e.printStackTrace();
       System.err.println(e.getSQLState());
    }
    Ensuite, tu peux récupérer ton l'id de l'item sélectionné dans l'ItemListener pour faire la requête qui va remplir l'autre combo, et afficher les 2 autres informations.
    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
    Membre confirmé Avatar de Alex1407
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 166
    Par défaut
    j'ai créer la classe SectionSalarie, mais mon code n'ai pas reconnu. Je doit mal m'y prendre, mais je suis un peut perdu la.

    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
    import java.beans.Statement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    import javax.swing.JComboBox;
     
    import DB.Connexion_BDD;
     
    public class SectionSalarie {
     
    	public SectionSalarie(String string, String string2) {
     
    		JComboBox comboBox_1 = new JComboBox();
    		comboBox_1.setBounds(530, 149, 135, 20);
    		frmSaisieDesHeures.getContentPane().add(comboBox_1);
    		ResultSet rs;
    		Statement stmt;
     
    		try {
    			stmt = Connexion_BDD.get().prepareStatement("SELECT DISTINCT id,SectionSalarie,Libelle FROM MOD_SectionSalarie ");
     
    			rs = stmt.executeQuery();
     
    			while (rs.next()) {
     
    				comboBox_3.addItem(new SectionSalarie(rs.getString("id"),rs.getString("SectionSalarie"), rs.getString("Libelle"));
    			}     
     
     
    		} catch (SQLException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}finally{
     
    			rs.close();
    		}
     
     
    	}
     
    }
    il vaut mieux utiliser des variables locales au lieu de recycler
    c'est a dire utiliser des nouvelle variables à chaque fois pour mes requêtes ?

    merci

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Alex1407 Voir le message
    j'ai créer la classe SectionSalarie, mais mon code n'ai pas reconnu. Je doit mal m'y prendre, mais je suis un peut perdu la.
    La classe SectionSalarie c'est juste une classe pour représenter les enregistrements de ta base de données (il faudrait une classe différente par table manipulée au moins). Ce n'est pas cette classe qui doit gérer la combobox : la combobox c'est de l'UI et c'est dans une autre classe (d'UI). Dans mon exemple j'ai une classe DemoListCellRenderer pour l'UI et la classe MyObject pour représenter les objets. Elle est définie dans la classe DemoLsitCellRenderer, mais pourrait être définie dans son propre fichier (en non static) et ça reviendrait au même.



    Citation Envoyé par Alex1407 Voir le message
    c'est a dire utiliser des nouvelle variables à chaque fois pour mes requêtes ?
    Oui. Sinon, c'est le meilleure moyen pour se mélanger les pinceaux, oublier de libérer une ressource, parce qu'elle a été remplacée par une autre, etc.
    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.

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

Discussions similaires

  1. [AC-2013] Requête avec dernier enregistrement d'une table en lien avec une autre
    Par Defaultuser01 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/08/2016, 23h38
  2. Remplir un champs TEXT caché avec une fonction on change sur une liste déroulante
    Par tang le breton dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 11h04
  3. [java] établir un lien avec une application java
    Par pmartin8 dans le forum Access
    Réponses: 2
    Dernier message: 19/10/2005, 14h36
  4. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 21h23
  5. Réponses: 3
    Dernier message: 21/06/2005, 11h37

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