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

Collection et Stream Java Discussion :

Utiliser HashMap pour remplir un JTable


Sujet :

Collection et Stream 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 Utiliser HashMap pour remplir un JTable
    Bonjour à tous,
    Je reviens encore vers vous après maintes recherches sans pourvoir m'en sortir.
    Voici mon problème :
    Je dispose d'un HashMap contenant des fournisseurs. En index, j'ai l'ID du fournisseur, et en valeur l'objet représentant le nom du fournisseur.
    Pour l'instant, avec cette méthode,
    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 static Map<String, String> getMapNomFourNumFour(){
    	connexion = new BDConnectAS400();
    	String requette = "SELECT DISTINCT NFOUFO,RSOCFO FROM B33STFC.FTFOUL01 WHERE CRAYFO = '205' OR CRAYFO = '208'"+"" +
    		"OR CRAYFO = '220' OR CRAYFO = '221' OR CRAYFO = '222' OR CRAYFO = '225' OR CRAYFO = '230' ORDER BY RSOCFO ASC";
    		//String requette  = "SELECT DISTINCT NFOUFO,RSOCFO FROM B33STFC.FTFOUL01 ORDER BY RSOCFO ASC";
    	Statement state;
    	ResultSet res;
    	Map<String, String> maHashMap = new TreeMap<String, String>();
    	try{
    	state = connexion.getInstance().createStatement();
    	res = state.executeQuery(requette);
    	while(res.next()){
    	maHashMap.put(res.getString(2), res.getString(1));}
    	res.close();
    	return maHashMap;
    	}catch (SQLException e){	  }
    	return null;
    	}
    je réussi à remplir sans trop de difficulté ma JComboFournisseur des noms des fournisseurs et lorsque je sélectionne un nom de fournisseur son code est affiché dans un JText.

    J'ai une autre table dans ma bdd contenant les articles des fournisseurs et j'aimerais mettre en place un second hashmap associé au prémier pour que lorsque je selectionne un fournisseur dans le combobox il affiche les objets article avec trois colonnes : code_article, le libellé, et le prix dans un JTable. Je précise que un fournisseur a 1 ou plusieurs articles.
    Je vous remercie pour votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    tu ajoute a ton objet Fournisseur un methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<Articles> getArticle()
    et l'ors de la selection dans ta combobox tu modifie ton TableModel

    il te faudra crée ton propre TableModel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private class ArticlesTableModel extends AbstractTableModel {
     
        public ArticlesTableModel(List<Articles> data){
        }
     
    ...
    }
    et tu redéfini tout ce que tu a besoin

    après au niveau de ton évènement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Articles> articleFourniseur = maJComboBox.getselectedItem().getArticle();
    myJTable.setModel(new ArticlesTableModel (articleFourniseur ));

  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 rolfone Voir le message
    et tu redéfini tout ce que tu a besoin
    après au niveau de ton évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Articles> articleFourniseur = maJComboBox.getselectedItem().getArticle();
    myJTable.setModel(new ArticlesTableModel (articleFourniseur ));
    Il ya un problème à ce niveau car la JCombobox n'accepte pas getArticle

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    eu oui il faut un petit cast

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((Fournisseur )maJComboBox.getselectedItem()).getArticle()
    ou sinon la version qui ce lit un peux mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Fournisseur  fournisseur = (Fournisseur )maJComboBox.getselectedItem();
    List<Articles> articleFourniseur = fournisseur.getArticle();
    myJTable.setModel(new ArticlesTableModel (articleFourniseur ));

  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
    En suivant la méthode de rolfone :
    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
    public JComboBox getComboFournisseur() {
    	if (ComboFournisseur == null){
    	ComboFournisseur = new JComboBox();
    	ComboFournisseur.setBounds(135, 130, 352, 22);
    	ComboFournisseur.setSelectedIndex(-1);
    	//Action pour sélectionner le numéro du fournisseur
    	ComboFournisseur.addActionListener(new ActionListener() {
    	@Override
    	public void actionPerformed(ActionEvent e) {
    	// TODO Auto-generated method stub
    	//String code = (String) ComboFournisseur.getSelectedItem();
    	Object code = ComboFournisseur.getSelectedItem();
    	TxtNumFourniss.setText((String) fournisseur.get(code));
    	nomFour = (String) ComboFournisseur.getSelectedItem();
    	txtNomFournisseur.setText(nomFour);	
    //** ICI					
    DAOFourEtNumero fourEtNumero = (DAOFourEtNumero)ComboFournisseur.getSelectedItem();
    List<ArticleFourAS400> articleFournisseur = fourEtNumero.getArticleFourAS400();
    Table.setModel(new ArticleFourAS400TableModel(articleFournisseur));
    //** ICI
    }});
    }
    return ComboFournisseur;
    	}
    J'ai cette erreur :
    Exception in thread "Thread-4" java.lang.ClassCastException: java.lang.String cannot be cast to ci.dataService.DAOFourEtNumero
    at ci.interGraph.AddReception$4.actionPerformed(AddReception.java:472)
    at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1240)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1311)
    Et du coup ma ComboFournisseur ne contient plus les codes des fournisseurs.

  6. #6
    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
    En fait voici le problème :
    J'ai une table Fournisseur contenant le nom du fournisseur et le code associer.
    Ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Code_Fournisseur|Nom_Fournisseur
         6059       | Sarkozy
         5387       | Sylvio
         8129       | Margaret
    ...
    J'ai aussi une seconde table de la bdd contenant les articles des ces fournisseurs se présentant ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Code_Fournisseur|Code_Article|Nom_Article|Prix_Article
         6059       | 1234566    |   Viande  |    23.25
         5387       | 5977852    |   Poupée  |    11.03
         8129       | 5698781    |   Jupont  |    08.44
         6059       | 0215899    |   Slip    |    08.44
    ...
    J'ai mis en place une méthode avec hashMap qui me permet de remplir maCombobox avec les noms des fournisseurs et lorsque je sélectionne un nom_Fournisseur le code_Fournisseur correspondant s'affiche dans un Jtext.

    Cette fois-ci, je voudrais réaliser la même méthode(hashMap) mais sur deux tables (Fournisseurs, Articles) de sorte que lors que je sélectionne un fournisseur dans la JCombobox la liste de ses articles s'affiches dans un JTable. Je précise que un fournisseur a 1 ou plusieurs articles alors c'est la listes des articles d'un fournisseur donné que je doit chercher dans la table article J'ai vu dans un post où l'on parle de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HashMap<Object, HashMap<String, Object>>
    Mais je n'ai pas très bien compris cela.

    Votre aide est très précieuse pour moi.
    Merci à encore les amis.

Discussions similaires

  1. Utiliser HashMap pour retrouver la correspondance
    Par the watcher dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/08/2010, 00h04
  2. Comment utiliser fread pour remplire 1tableau dynamique
    Par MClover dans le forum Débuter
    Réponses: 9
    Dernier message: 13/04/2008, 15h38
  3. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01
  4. Besoin de conseils pour remplir une JTable.
    Par Mike888 dans le forum Composants
    Réponses: 13
    Dernier message: 16/05/2007, 15h06
  5. Réponses: 36
    Dernier message: 13/05/2004, 18h22

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