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 JTable avec HashMap


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 34
    Points
    34
    Par défaut Remplir JTable avec HashMap
    Bonjour,

    Après avoir chercher sur le forum je n'ai pas réussi à trouver comment faire ceci:

    J'ai un client qui contient des informations, stockées dans une HashMap (nom, adresse, téléphone) et j'aimerais les afficher pour pouvoir les lister et éventuellement les modifier.
    Le problème pour le moment est de comment faire pour les afficher dans la JTable?

    Actuellement j'utilise une JList mais je préfère la JTable cependant je n'arrive pas à faire pour avoir quelque chose de la sorte:

    -----------------------------
    | Nom | Adresse | Téléphone |
    -----------------------------
    |-a---|--adr----|---04...----|
    |-az--|--adrt---|---04...----|
    |-rt-- |--adry---|-- 06...----|
    |-...--|--...-----|---...------|
    -----------------------------

    Mon code actuel si ca peut vous aidez:

    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
     
    	public CtrConsulterTousLesClients(FicheClient f)
    	{ 				
    		Fenetre maFenetre = new Fenetre();
     
    		String  title[] = {"Nom", "Adresse", "Telephone"};
     
    		//Creer une nouvelle fenetre de type jscrollpane
    		maFenetre.fenetreJScrollPane();
     
    		JList listeClient = new JList(f.mesClients().values().toArray());
    		//JTable listeClient = new JTable(???, title);
     
    		maFenetre.fenetreJScrollPane(listeClient);
    		//Affiche la fenetre contenant les resultats
    		maFenetre.afficheFenetreScroll("Afficher tous les clients", JOptionPane.DEFAULT_OPTION);
    	}
    En espérant avoir assez précis.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu dois passer par le modèle de la JTable. Par contre, la conservation de l'ordre dans le parcours d'une Hashtable n'est pas garantie. Tu devrais passer par une structure de données ordonnées.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Merci de la réponse. Voilà j'ai fait ce modèle:

    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
     
    import java.io.Serializable;
    import java.util.*;
    import javax.swing.table.AbstractTableModel;
     
    public class ModeleListe extends AbstractTableModel implements Serializable{	
     
    	private static final long serialVersionUID = 1L;
    	private HashMap<String, Client> data;
     
    	ModeleListe(FicheClient f) {
    		data = f.mesClients();
    	}
     
    	@Override
    	public int getColumnCount() {
    		// TODO Auto-generated method stub
    		return 5;
    	}
     
    	@Override
    	public int getRowCount() {
    		// TODO Auto-generated method stub
    		return data != null ? data.size():0;
    	}
     
    	@Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		// TODO Auto-generated method stub
     
    		Client c = data.get(rowIndex);
     
    		switch (columnIndex) {
    			case 0: return c.getNom();
    			case 1: return c.getAdresse();
    			case 2: return c.getTelephone();
    			case 3: return c.getEmail();
    			case 4: return c.getCarteFidelite();
    		}
     
            return null;
    	}	
     
    	@Override
    	public Class<?> getColumnClass(int col) {
    		switch (col) {
    			case 0: case 1: case 2: case 3: return String.class;
    			case 4: return Integer.class;        
    		}
     
    		return Object.class;
    	}
     
        /* (non-Javadoc)
         * @see javax.swing.table.AbstractTableModel#getColumnName(int)
         */
        @Override
    	public String getColumnName(int col) {
        	switch (col) {
        		case 0: return "Nom";
        		case 1: return "Adresse";   
        		case 2: return "Telephone";
        		case 3: return "E-mail";  
        		case 4: return "Carte fidelite";
        	}
     
        	return null;
    	}
     
        /* (non-Javadoc)
         * @see javax.swing.table.AbstractTableModel#setValueAt(java.lang.Object, int, int)
         */
        @Override
    	public void setValueAt(Object value, int row, int col) {
            // TODO Auto-generated method stub
        	Client c = data.get(row);
        	switch (col) {
        		case 0:            
        			String nom = (String) value;
        			c.setNom(nom);
        			break;
        		case 1:            
        			String adr = (String) value;
        			c.setAdresse(adr);
        			break;
        		case 2:            
        			String tel = (String) value;
        			c.setTelephone(tel);
        			break;
        		case 3:            
        			String email = (String) value;
        			c.setEmail(email);
        			break;
        		case 4:
        			Integer carte = (Integer) value;
        			c.setCarteFidelite(carte);
        			break;        
        	}
        	//On notifie la JTable qu'une valeur a été modifiée
        	fireTableCellUpdated(row, col);
    	}
    }
    Cependant comment je peux l'utiliser ? Et du coups la clef n'est plus un String mais un Integer? Sera t-il possible ensuite de les mettre par ordre alphabétique?

    Il faut savoir que par la suite j'envisage de faire un recherche par une partie du nom.

    ex: Nom = "Robert Dupont" si on tape que "Rob" alors ca trouve toutes les personnes qui contient les lettres "rob" (majuscule et minuscule confondues).

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    dans ton implémentation, la clé de la Hashmap est inutile. De plus, cela t'oblige à maintenir une cohérence forte entre la clé String et l'indice de la ligne int. Ce sera une source inépuisable de bug.
    Je t'encourage vivement à abandonner la HashMap au profit d'un ArrayList par exemple, ou tout autre conteneur de données ordonnées.
    Pour le tri alphabétique, la JTable propose directement des filtres relativement simple à utiliser, indépendant de la structure de données choisie dans le modèle. Commence par regarder la javadoc pour la JTable afin d'obtenir des débuts de pistes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    D'accord merci bien, je vais regarder tout ca.

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

Discussions similaires

  1. Remplir JTable avec un fichier texte
    Par da_latifa dans le forum Débuter
    Réponses: 6
    Dernier message: 19/04/2013, 13h35
  2. Réponses: 2
    Dernier message: 19/05/2011, 11h17
  3. Remplir jtable avec des données d'un tableau
    Par kaisser dans le forum Composants
    Réponses: 1
    Dernier message: 01/01/2010, 18h19
  4. remplir Jtable avec plusieurs Resultset
    Par stratocasters dans le forum Composants
    Réponses: 9
    Dernier message: 05/11/2009, 22h35
  5. [SWING] remplir une jtable avec une matrice de double
    Par Psykorel dans le forum Composants
    Réponses: 3
    Dernier message: 04/01/2006, 14h14

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