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 :

Besoin de conseils pour remplir une JTable.


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut Besoin de conseils pour remplir une JTable.
    Salut !

    Je voudrais dans mon appli pouvoir remplir une JTable avec des données provenant de la DB.
    J'ai fait hériter ma JTable de AbstractTableModel. Et à vrai dire, je ne comprends pas trop le système des Fire...

    Dans mon cas, j'aurais besoin de la commande FireTableRowsInserted. D'après ce que j'ai pu voir en farfouillant sur le net, on place cette commande dans une méthode d'ajout (genre addRow();). Mais comment cela fonctionne-t-il exactement ?

    Moi, dans mon code, je récupère une ArrayList de ma DB avec toutes les données dedans (en gros, il s'agit d'une liste de prêts; il y a 10 champs par prêts).
    La commande FireTableRowsInserted ajoute une ligne à la fois je crois... Donc, je dois boucler tant qu'il reste des données dans ma liste...


    Ext-ce que je suis dans le bon ?

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Voir les notions MVC des composants JTable, JTree, JList etc. dans les tutoriaux de sun.
    C'est pas ta JTable qui doit hériter de AbstractTableModel mais un modèle dans lequel tu vas déclarer ton ArrayList. C'est dans le modèle que tu vas implémenter ta méthode addRow(...) et dans laquelle tout à la fin tu feras un feras un fireXXX pour notifier au composant que le contenu du modèle a changé.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Oui, c'est tout à fait ça (je m'étais peut-être mal exprimé).

    Mais il y a quand même qqch qui me chifonne; quand j'appelle la méthode fire... sur quels critères se base-t-elle pour savoir qu'elle doit aller chercher les infos dans telle liste (plutôt qu'une autre) ? Il prendrait la première qu'il trouve en tant que variable de classe ?

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Les méthodes FireXXX ne font que signaler aux listeners du model qu'une modification a été effectué sur celui ci (avec quelques paramètres indiquant la ou les lignes impactées).
    Le listener devras dans ce cas réagir et recharger les données des lignes spécifiées depuis le model.

    Donc
    1. Tu changes tes données dans le model
    2. Tu préviens les listeners du model que des données ont été modifiées en appelant la méthode fireXXX qui va bien
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par sinok
    Les méthodes FireXXX ne font que signaler aux listeners du model qu'une modification a été effectué sur celui ci (avec quelques paramètres indiquant la ou les lignes impactées).
    Le listener devras dans ce cas réagir et recharger les données des lignes spécifiées depuis le model.

    Donc
    1. Tu changes tes données dans le model
    2. Tu préviens les listeners du model que des données ont été modifiées en appelant la méthode fireXXX qui va bien
    C'est ça que je ne saisis pas; comment le listener sait-il où sont les données ?

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah tu as la réponse en lisant la doc:

    Citation Envoyé par javadoc
    public void fireTableRowsInserted(int firstRow, int lastRow)Notifies all listeners that rows in the range [firstRow, lastRow], inclusive, have been inserted.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Pourquoi j'ai l'impression qu'on ne parle pas de la même chose ...

    Toi tu me parles de la JTable, moi je parle des données sources; comment le listener sait-il où se trouvent ces données sources ?


    NB: je sais, je suis borné mais je veux comprendre

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Points : 18
    Points
    18
    Par défaut
    Tkt Mike, tu vas finir par trouver ! Courage !!!

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah les données sources sont dans le model et basta.
    Le fireXXX lance un évènement (Event) spécifique, portant certains attributs (dans le cas du fireTableRowsInserted il s'agit du début et de la fin de l'intervalle dans lequel les lignes ont été ajoutée).
    Le listener reçoit cet event puis agit en conséquence...
    Et je en te parlais pas de la JTable ici mais bien de son model, en Swing c'est le toujours le model qui lance les notifications fireXXX.

    ++
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Bon, je nage complètement et après des heures de piétinement, je refais appel à vous...

    Actuellement, j'ai ceci :

    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
     
    public class TraderPretTableModel extends AbstractTableModel{	
     
    	private static final long serialVersionUID = -8435807783031696373L;	
    	private String[] header = {"Id Pret","Trader","Middle Office","Contrepartie","Statut","Statut_Retour","Compartiment","Sicav",
    			"Titre","Date_Début","Quantité","Date_Fin"};	
    	private ArrayList<Pret> content = null;
     
    	public TraderPretTableModel(){
    		content = new ArrayList<Pret>();		
    		Iterator<Pret> iter = Pret.liste();
    		try {
    			if (! iter.hasNext())
    				throw new PretNotExistException();
    			else {
    				while(iter.hasNext()) {
    					Pret pret = iter.next();			
    					addRow(pret);					
    				}	
    			}	
    		}
    		catch(PretNotExistException e) {
    			System.out.println("Pret inexistant - val = " + e.getMessage());
    		}		
    	}
     
    	.....
     
    	public void addRow(Pret pret){
    		content.clear();		
    		content.add(pret);
    		fireTableRowsInserted(content.size()-1,content.size()-1); 
    	}
    }
    En fait, dans le constructeur, je récupère une liste de prêts. Et c'est celle-ci que je dois afficher dans ma JTable (Il y a 12 champs par prêt (12 colonnes par ligne donc...)).

    Mais il y a 2 problèmes :

    1°) Il n'y a qu'une seule ligne qui se remplit dans la table.
    2°) Au lieu d'avoir la valeur correcte dans chaque cellule, j'obtiens un "domain.Pret@979e8b"


    Si vous pouvez me sortir de l'impasse, ça serait cool !

  11. #11
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Un conseil ( flemme d'expliquer le modèle MVC, c'est long toussa ) : fais hériter ton modèle de TableModel plutot que AbstractTableModel, tu vas vite comprendre tes erreurs à la compilation...

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En même temps si tu fais un clear() sur ton ArrayList à chaque ajout? il est sur que tu ne pourras avoir au plus qu'un objet dans ton ArrayList, la méthode clear vidant entièrement la liste.

    donc enlève donc ton content.clear() de ta méthode addRow ça ira mieux.


    Ensuite en ce qui concerne la valeur dans la cellule: il te suffit de parcourir ce topic récent (datant d'hier ou avant hier) pour en comprendre la raison.

    En général rechercher sur le forum ça aide
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Ok, Merci !

    Ca roule ...


    Je suppose que pour la méthode setValue(); , c'est la même chose en sens inverse ...

  14. #14
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pourquoi en serait'il autrement?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. [PHP 5.1] Besoin de conseil pour optimiser une fonction
    Par renaud26 dans le forum Langage
    Réponses: 3
    Dernier message: 14/08/2017, 08h11
  2. Réponses: 4
    Dernier message: 25/01/2010, 23h00
  3. Besoin de conseils pour créer une page avec un avatar
    Par cedric/copy dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2009, 13h46
  4. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01
  5. [Excel] Demande de conseils pour remplir une feuile Excel
    Par essembeh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/08/2007, 11h38

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