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 :

Mise a jour JTable, encore et toujours


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 68
    Par défaut Mise a jour JTable, encore et toujours
    Bonjour à tous, j'ai des soucis pour mettre ma JTable à jour ... je crée mon model comme ceci : Je me connect à ma base MySql j'ajoute mes contact dans ma collection et je dis que le tableau de mon model est égal à ma collection :

    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 class ModeleStatiqueObjet extends AbstractTableModel {
    	private Client[] MesClients;
    	private  String[] entetes = {"ID", "Nom", "Prénom", "Société", "E-mail"};
     
    	public ModeleStatiqueObjet() {
    		super();
     
    		Annuaire monAnnuaire = new Annuaire();
    		ConnectSql maConnectSql = new ConnectSql();
    		maConnectSql.start("jdbc:mysql://localhost:3306/mailer", "root", "");
    		monAnnuaire.remplir_collection(maConnectSql.tab_contact(), maConnectSql.cpt_ligne());
    		maConnectSql.stop();
     
    		MesClients = new Client[] {};
    		MesClients = monAnnuaire.MesClients;
    	}
     
    .........
    Et donc lors d'un formulaire d'enregistrement, l'enregistrement dans ma base est ok et je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    connectSQL.start("jdbc:mysql://localhost:3306/mailer", "root", "");
    connectSQL.ajouter(recup_TF());
    connectSQL.stop();
    monObjet.fireTableDataChanged();
    Mais ma JTable ne se met pas à jour ...
    Quelqu'un aurait-il une solution ? Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 67
    Par défaut
    Citation Envoyé par Tobear91 Voir le message
    Bonjour à tous, j'ai des soucis pour mettre ma JTable à jour ... je crée mon model comme ceci : Je me connect à ma base MySql j'ajoute mes contact dans ma collection et je dis que le tableau de mon model est égal à ma collection :

    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 class ModeleStatiqueObjet extends AbstractTableModel {
    	private Client[] MesClients;
    	private  String[] entetes = {"ID", "Nom", "Prénom", "Société", "E-mail"};
     
    	public ModeleStatiqueObjet() {
    		super();
     
    		Annuaire monAnnuaire = new Annuaire();
    		ConnectSql maConnectSql = new ConnectSql();
    		maConnectSql.start("jdbc:mysql://localhost:3306/mailer", "root", "");
    		monAnnuaire.remplir_collection(maConnectSql.tab_contact(), maConnectSql.cpt_ligne());
    		maConnectSql.stop();
     
    		MesClients = new Client[] {};
    		MesClients = monAnnuaire.MesClients;
    	}
     
    .........
    Et donc lors d'un formulaire d'enregistrement, l'enregistrement dans ma base est ok et je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    connectSQL.start("jdbc:mysql://localhost:3306/mailer", "root", "");
    connectSQL.ajouter(recup_TF());
    connectSQL.stop();
    monObjet.fireTableDataChanged();
    Mais ma JTable ne se met pas à jour ...
    Quelqu'un aurait-il une solution ? Merci d'avance pour votre aide
    salut
    voici un exemple de mise a jour d'un jtable depuit une requette sql
    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
     
    public void RemplirTable(){
    		 TableModel model ;
    		 DefaultTableModel x = (DefaultTableModel) TonJTable.getModel();
    		 for(int i=0;i<TonJTable.getRowCount();i++){
    			 x.removeRow(i);
    		 }
    		 x.setColumnCount(0); 
    		 model = x ; 
    //ici en rempli le mode depuit les requette !!!
    		 model = new DefaultTableModel(MySQLRequette.InfoFournisseur(),MySQLRequette.NomFournisseur());
    //MySQLRequette.InfoFournisseur() titre es colomn que je recupere depuit une requette
    //MySQLRequette.NomFournisseur() donnés de la base 
    //note le type de retour de ses fonction est un Vector 
    		 TonJTable.setModel(model);
    	  }

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Dans les deux cas vous procédez de façon plutôt peu propre.

    Pour procéder proprement, il faut


    1. Définir un bean java (objet avec getter et setter sur des propriés) contenant à minima les propriétés que l'on veut afficher (plus souvent deux ou trois autres propriété utiles). On pensera à en redéfinir les méthodes equals et hashcode correctement (cf FAQ)
    2. Définir un TableModel héritant d'AbstractTableModel et s'appuyant sur une simple collection de Bean correspondant à l'objet que l'on veut afficher. Et bien sûr, redéfinir (getValueAt, setValueAt, getColumnClass, getColumnName, getRowCount, getColumnCount, isEditable...) et ajouter (addBean, insertBeanAt, updateBean, removeBean...) toutes les méthodes dont on peut avoir besoin, en s'appuyant sur les méthodes fireXXX fournies par l'AbstractTableModel pour notifier les modification à la JTable. cf le tutoriel sur les JTables pour plus d'infos.
    3. Définir une couche de récupération de données (en général en passant par le pattern DAO) dont le but est de fournir toutes les actions nécessaires aux communications avec la base de données.
    4. Enfin créer une classe contrôleur (cf pattern MVC) responsable du tout, qui lancera la récupération des données dans un Thread externe (en effet il ne faut pas faire les requêtes dans le thread graphique sous peine de bloquer totalement l'interface (cf http://gfx.developpez.com/tutoriel/j...ing-threading/). Pour intégrer correctement la gestion des Threads avec Swing il est recommandé d'utiliser la classe SwingWorker.

    A partir de ce moment là ça commence à être propre comme implémentation.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 68
    Par défaut
    Wow tout ca en une semaine ca risque d'être limite, mais j'ai le fil conducteur.

    Je test ce soir la solution de black_night qui s'avère être moins complète effectivement, mais je suis en manque de temps

    En tout cas merci pour ce cours.

    A partir de ce moment là ça commence à être propre comme implémentation.
    Rien que ca

    Merci je reposte ce soir pour tenir au courant

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Créer le bean: 10 minutes

    Créer le Model: 1 à 2h

    Créer la couche de récupération des données: une demie journée (et encore,courte la demie journée si tu as déjà des structures DAO de base sous la main)

    Créer le contrôleur avec gestion de Threads: Demie journée aussi

    Bref une journée et demie pour avoir quelque chose de propre, aisément débuggable (je veux dire par là qui ne va pas planquer les exceptions SQL au beau milieu de la pîle EDT & cie), ça vaut quand même un tant soit peu la peine...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 68
    Par défaut
    Oui mais je suis en alternance et j'apprend depuis quelques mois le Java et entre le travail et les cours ^^ ...

    Bref on s'égare mais une chose est sur je prendrais le temps d'apprendre

Discussions similaires

  1. [QST] Mise a jour JTable
    Par hannibal.76 dans le forum Composants
    Réponses: 0
    Dernier message: 28/06/2011, 20h13
  2. mise a jour d'une Jtable
    Par boumacmilan dans le forum Composants
    Réponses: 1
    Dernier message: 22/06/2009, 11h35
  3. Problème de mise a jours d'une JTable
    Par vinzzzz dans le forum Composants
    Réponses: 9
    Dernier message: 01/06/2009, 10h05
  4. probléme mise à jour JTABLE
    Par altaro dans le forum Composants
    Réponses: 0
    Dernier message: 23/05/2009, 21h49
  5. [MySQL] MYSQL Mise a jour toute une table encore
    Par FoxLeRenard dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2009, 20h02

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