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 :

Remplir JComboBox à partir de List


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut Remplir JComboBox à partir de List
    Bonjour les amis;
    Je voudrais remplir ma JComboBox à partir d'une list. J'ai alors créer une class dans laquelle une ArrayList (list) est remplie à l'aide d'une requête sql (code 1).
    j'ai mis en place une méthode (code 2) dans ma frame contenant le Combo et affecter cette list. Mais malheureusement, le combo n'est pas rempli à l'affichage de la frame au contraire je constate un gel du programme.
    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
    package ci.dataService;
     
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
     
    import ci.ressorces.FourEtNumero;
     
    public class DAOFourEtNumero {
    	private static BDConnectAS400 connexion = null;
     
    	public DAOFourEtNumero(){
     
    	}
     
    	public static ArrayList<FourEtNumero> getlistFourEtNumero(){
    		connexion = new BDConnectAS400();
    		String requette  = "SELECT DISTINCT B33STFC.FTFOUL01.RSOCFO FROM B33STFC.FTFOUL01 ORDER BY RSOCFO ASC";
    		Statement state;
    		ResultSet res;
    		ArrayList<FourEtNumero> list = new ArrayList<FourEtNumero>();
     
    		try{
    			state = connexion.getInstance().createStatement();
    			res = state.executeQuery(requette);
    			while(res.next()){
    				FourEtNumero fourEtNum = new FourEtNumero();
    				fourEtNum.setRSOCFO(res.getString(1));//raison sociale du fournisseur
    				list.add(fourEtNum);
    			}
    			res.close();
    			return list;
    		}catch (SQLException e){
     
    		}
     
    		return null;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public ArrayList<FourEtNumero> lister2 = null;  //  @jve:decl-index=0:
    	public FourEtNumero tempo = null;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void remplirFournisseur(){
    		ArrayList<FourEtNumero> list = DAOFourEtNumero.getlistFourEtNumero();
    		lister2 = list;
    		for(int i=0;i<list.size();i++){
    			ComboFournisseur.addItem(list);
    		}
    	}
    Quelqu'un pourra-t-il me donner une piste pour résoudre l'erreur ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int i=0;i<list.size();i++){
    			ComboFournisseur.addItem(list);
    }
    Tu rajoutes la liste à ta combo.
    Tu devrais plutôt ajouter les éléments de ta liste (redéfini toString()de FourEtNumero si ce n'est fait).

    tu peux utiliser le foreach java 5, c'est plus concis et tu gères moins de variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(FourEtNumero  currentFourEtNumero : list){
      ComboFournisseur.addItem(currentFourEtNumero);
    }

    Sinon ton getlistFourEtNumero() peut renvoyer null (si pas de résultat ou exception dans le traitement) et au final générer un nullPointerException dans remplirFournisseur(). Autant faire péter une exception parlante si le cas 'pas de résultat' est non permis ou renvoyer un tableau vide si le cas est permis.

  3. #3
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Citation Envoyé par thebloodyman Voir le message
    Tu devrais plutôt ajouter les éléments de ta liste (redéfini toString()de FourEtNumero si ce n'est fait).
    Merci thebloodyman de trouver la classe FourEtNumero
    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
    package ci.ressorces;
     
    import java.io.Serializable;
     
    public class FourEtNumero implements Serializable{
     
    	private static final long serialVersionUID = 1L;
    	private String NFOUFO;//Numéro du fournisseur (05)
    	private String RSOCFO;//Raison sociale (11)
     
    	public FourEtNumero(){
     
    	}
     
    	public void setNFOUFO(String nFOUFO) {
    		NFOUFO = nFOUFO;
    	}
     
    	public String getNFOUFO() {
    		return NFOUFO;
    	}
     
    	public void setRSOCFO(String rSOCFO) {
    		RSOCFO = rSOCFO;
    	}
     
    	public String getRSOCFO() {
    		return RSOCFO;
    	}
    }
    Tu parles des éléments que j'ai déclarés ici ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Tu parles des éléments que j'ai déclarés ici ?
    Non, non je parle de FourEtNumero.

    A la base tu as une liste d'objets de type FourEtNumero.
    Et toi tu veux ajouter chacun de ses objets dans la JComboBox, il faut donc ajouter chaque FourEtNumero dans ton objet JComboBox et non la liste en entier.

  5. #5
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Citation Envoyé par thebloodyman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(FourEtNumero  currentFourEtNumero : list){
      ComboFournisseur.addItem(currentFourEtNumero);
    }
    En procédant ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0;i<list.size();i++){
    			ComboFournisseur.addItem(list.get(i).getRSOCFO());
    		}
    le combo est remplir. Est-ce une bonne méthode ? Qu'en penses-tu ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Fonctionnellement, c'est une bonne solution si tu as n'as pas besoin d'accéder aux autres champs (Par exemple NFOUFO) de ta classe FourEtNumero durant les traitements sur tes comboBox.
    Si tu as besoin d'accéder à d'autres champs de ton objet FourEtNumero il vaut mieux ajouter l'objet FourEtNumero dans ta comboBox.

    Techniquement, tu peux avoir un code plus simple en utilisant la boucle foreach de Java.
    Compare les deux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int i=0;i<list.size();i++){
    ComboFournisseur.addItem(list.get(i).getRSOCFO());
    }
    VS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(ComboFournisseur comboFournisseur : list){
    ComboFournisseur.addItem(comboFournisseur.getRSOCFO());
    }
    Dans la seconde solution, tu n'as pas a créer de variable i, ni à expliciter les conditions d'initialisation, de sortie et d'incrémentation de la boucle.
    En gros, t'as moins de risques de faire des erreurs
    La boucle itère sur chaque objet de la liste et sort tout seul quand il n'y a plus d'objets sur lequel itéré.

  7. #7
    Membre éclairé Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Par défaut
    Citation Envoyé par thebloodyman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(ComboFournisseur comboFournisseur : list){
    ComboFournisseur.addItem(comboFournisseur.getRSOCFO());
    }
    En effet tu a pleinement raison thebloodyman. J'aurai besoin d'accéder aux autres champs comme le champ NFOUFO qui doit s'afficher lorsque je fais une sélection dans le Combobox. Ta procédure fonctionne à merveille.

    Donc voici ma seconde préoccupation : comment mettre une procédure dans le listener de ma combofournisseur afin d'afficher le numéro (NFOUFO) du fournisseur correspondant dans un Jtextfield lorsque je sélectionne (RSOCFO) le nom du fournisseur du combofournisseur.

    Merci encore.

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

Discussions similaires

  1. Remplir JComboBox dynamiquement à partir d'un tableau
    Par gerem42 dans le forum Composants
    Réponses: 3
    Dernier message: 06/12/2013, 11h48
  2. Remplir JTexteField à partir de JCombobox
    Par the watcher dans le forum EDT/SwingWorker
    Réponses: 15
    Dernier message: 19/07/2010, 17h24
  3. [AC-2000] Remplir une zone de liste modifiable à partir de 2 tables
    Par etoileetoile dans le forum VBA Access
    Réponses: 6
    Dernier message: 30/09/2009, 09h43
  4. Réponses: 0
    Dernier message: 03/07/2009, 16h16
  5. remplir une table à partir une liste déroulante
    Par anthony_rexis dans le forum IHM
    Réponses: 3
    Dernier message: 06/11/2007, 11h29

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