Accueil > Forum > > > > mise à jour automatique de jtable à partir de BD
mise à jour automatique de jtable à partir de BD
vendredi 26 septembre 2008 à 02:31:12 |
mise à jour automatique de jtable à partir de BD

unaware
|
Bonjour à tous, Je suis nouveau dans ce forum. Je fais appel à vos compétence car j'ai un petit souci. Je suis en train de développez une petite appli avec swing et mysql et j'a un problème que j'arrive pas à régler. J'ai une classe "Gestion_Stock" qui contient des jtable, c'est le point d'entrée de l'application. Code : public class Gestion_Stock extends JFrame { .... .... public JTable getJTableClient() {
if (jTableClient == null){
jTableClient = new JTable(new BdSelection()); jTableClient.setAutoCreateRowSorter(true); } return jTableClient; } .... .... }//fin classe Gestion_stock
Au démarrage, l'appli va chercher les donnée dans la classe "BdSelection" et les afficher dans la table. Voici le code de cette classe Code : publicclass BdSelection extends AbstractTableModel { privatestaticfinallong serialVersionUID = 1L; privatestatic String url; private Vector data = new Vector(); private Vector columnNames = new Vector <String> ();
public BdSelection () { try { try { Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException ex) { //.... } url ="jdbc:mysql://localhost:3306/gestion_stock"; System.out.println("connection à la BdSelection"); Connection connection = DriverManager.getConnection(url, "root", ""); Statement stmt = connection.createStatement();
String sql = "select * FROM client"; ResultSet rs = stmt.executeQuery(sql); ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); for(int i = 1; i <= columns; i++){ columnNames.addElement(md.getColumnName(i)); } while(rs.next()){ Vector row = new Vector(columns); for(int i = 1; i <= columns; i++){ row.addElement(rs.getObject(i)); } data.add(row); }//fin while rs.close(); stmt.close(); } catch(SQLException e) { System.out.println(e.getMessage()); System.out.println(e.getStackTrace()); } }//fin constructeur
@Override publicint getColumnCount(){ return columnNames.size(); } @Override publicint getRowCount(){ return data.size(); } @Override public Object getValueAt(int row, int column){ Vector rowData = (Vector) data.elementAt(row); return rowData.elementAt(column); } @Override publicboolean isCellEditable(int arg0, int arg1){ returntrue; } @SuppressWarnings("unchecked") @Override publicvoid setValueAt(Object value, int row, int col){
Vector dataRow = (Vector)data.elementAt(row); dataRow.setElementAt(value, col); fireTableCellUpdated(row, col); } } Jusqu'à là, pas de souci. Mais mon mon appli contient aussi une classe qui permet d'insérer des données "AjouterNouveauClient". L'insertion se fait en cliquant sur un bouton. Code : publicclass AjouterNouveauClient extends JDialog { .... public JButton getJButton(){ if(jButton == null){ jButton = new JButton(); jButton.setText("Valider"); jButton.addActionListener(new java.awt.event.ActionListener(){ publicvoid actionPerformed(java.awt.event.ActionEvent e){
NouveauClient nc = new NouveauClient();//instanciation d'une classe contenant les champs et les getters/setter nc.setIdClient(jTextFieldIdClient.getText().trim()); nc.setNom(jTextFieldNom.getText().trim()); nc.setPrenom(jTextFieldPrenom.getText().trim()); nc.setAdresse(jTextFieldAdresse.getText().trim()); nc.setCodePostal(jTextFieldCp.getText().trim()); nc.setCivilite((String)jComboBoxCivilite.getSelectedItem()); nc.setVille(jTextFieldVille.getText().trim()); nc.setTel(jTextFieldTel.getText().trim()); nc.setFax(jTextFieldFax.getText().trim()); nc.setMail(jTextFieldMail.getText().trim());
new BaseDonnees(nc); } }); } return jButton; } .... } L'insertion de ces données se fait via une autre classe "BaseDonnees" Code : publicclass BaseDonnees { ..... public BaseDonnees (NouveauClient nClient){ String sql = "INSERT INTO client (Id, Civilité, Nom, Prénom, Adresse, Code_postal, Ville, Téléphone, Fax, Mail) " + "VALUES ("+ "'"+nClient.getIdClient()+"'," +"'"+nClient.getCivilite()+"'," +"'"+nClient.getNom()+"'," +"'"+nClient.getPrenom() +"'," +"'"+nClient.getAdresse()+ "'," +"'"+nClient.getCodePostal() + "'," +"'"+nClient.getVille()+ "'," +"'"+nClient.getTel()+"'," +"'"+nClient.getFax()+"'," +"'"+nClient.getMail()+"'"+")";
System.out.println("Insertion dans la base ++++++++++++++"); ....... } } L'insertion dans la base se fait aussi. Mais ce que je voudrais, c'est que dès que j'inère ces donnéés dans la base, elles soient également affichées dynamiquement dans la table. J'ai essayé plein de choses préconisées dans des forums et tutos mais en vain. Jusqu'à maintenant, pour mettre ces nouvelles données dans la table, je suis obligé de redémarrer l'application. Comment faire de sorte que les données soient intégrées dans la table dynamiquement. Merci d'avance de votre aide.
|
|
vendredi 26 septembre 2008 à 08:44:00 |
Re : mise à jour automatique de jtable à partir de BD

Ombitious_Developper
|
Salut:
J'ai une petite question à te poser. Veux tu que le composant JTable soit mis à jour lorsque tu inséres des nouvelles données à partir de ton application ou bien lorsque tu opéres sur la base de données depuis une console d'administration par exemple?
|
|
vendredi 26 septembre 2008 à 09:47:10 |
Re : mise à jour automatique de jtable à partir de BD

unaware
|
bonjour et merci d'avoir réagi à mon post. Je voudrais que jtable soit mise à jour dès que je clique sur le bouton dans "AjouterNouveauClient" est cliqué. donc la mise à jour doit se faire à partir de l'application.
|
|
vendredi 26 septembre 2008 à 13:24:14 |
Re : mise à jour automatique de jtable à partir de BD

indiana_jules
|
Bonjour, En ce cas, il faut mettre en place un bon petit Observer / Observable. Tu pourras trouver une petite explication ici: http://www.toutenligne.com/index.php?contenu=mvc&menu=pattern
Voili voilà
[#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises] [#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
|
|
vendredi 26 septembre 2008 à 13:58:39 |
Re : mise à jour automatique de jtable à partir de BD
|
vendredi 26 septembre 2008 à 14:26:34 |
Re : mise à jour automatique de jtable à partir de BD

unaware
|
Merci de vos messages. Indiana_jules, je suis allé sur le lien que tu m'as indiqué. J'ai compris le principe. Cette solution a l'air adapté à mon problème mais je ne sais pas où et comment les implémenter. Pouvez-vous me donner des pistes? Merci d'avance!
|
|
vendredi 26 septembre 2008 à 14:49:33 |
Re : mise à jour automatique de jtable à partir de BD

indiana_jules
|
Salut, dans l'api standard Java, les deux classes Observer / Observable existent déjà (pas besoin de les recréer, sauf dans certains cas d'utilisations, comme en RMI). L'interface Observer devra s'implémenter du côté de ta JTable. En effet, c'est elle qui recevra la notification comme quoi il y a eu une insertion (et vu qu'elle peut recevoir des arguments, elle pourrait même recevoir les valeurs de ta nouvelle ligne, sans aller chercher dans la base de données !!!). Une fois implémenter, il faut que l'observer "s'inscrit" à une observable. Il faut le considérer comme un noeud central. Il référence tous les observer, et offre des mécanismes de notifications. Quand ces derniers seront appelés ( notifyObservers() , notifyObservers(Object arg)), un message sera envoyé à tous les observer (attention, bien penser à setChanged() appeler AVANT un notifyObserver). Cet observable, tu peux la mettre "où tu veux" (réfléchis au meilleur endroit dans ton programme). Il suffira alors que ton bouton aille le chercher et l'appelle. Voilou [#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises] [#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
|
|
vendredi 26 septembre 2008 à 15:02:53 |
Re : mise à jour automatique de jtable à partir de BD

unaware
|
je te remercie pour ta réponse rapide. J'ai compris pour l'interface Observer. Je l'implémente dans la classe où j'ai ma table et je récupère les données via la méthode update(Observable o, Object arg) . Quant à la classe Observable, je doit la créer à part ou faire en sorte qu'une des mes classe base données hérite de cette classe? Est-ce que cela veut aussi dire que je peux me passer le modèle de table (AbstractTableModel) que j'utilisais? désolé, mes qustions paraîtront peut-être stupides mais jusqu'à maintenant je ne connaissais pas ces 2 classe. Je débute en java.
|
|
vendredi 26 septembre 2008 à 15:55:38 |
Re : mise à jour automatique de jtable à partir de BD

indiana_jules
|
Re, soit tu crées une instance d'Observable dans tes classes de base de données, soit tu hérites (selon ta conception, il faudra que tu prennes l'un ou l'autre). En revanche, cela ne veut pas dire que tu puisses de passer de ton model. Au contraire, tu devras certainement l'utiliser dans la méthode update.
Voilà
[#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises] [#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
|
|
vendredi 26 septembre 2008 à 16:18:05 |
Re : mise à jour automatique de jtable à partir de BD

unaware
|
ok, je vais essayer ça et je t'en dirais des nouvelles. Bonne journée
|
|
Cette discussion est classée dans : int, vector, gettext, nc, nclient
Répondre à ce message
Sujets en rapport avec ce message
PB avec un Vector [ par niyax ]
!! wise pushing !!salut,comme dans tous les vectors, j'y stocke des objets. Le pb est que je n'arrive pas a acceder aux attributs de ces satanés objet
Vector(int) haha... [ par AbriBus ]
salut a tous...j'ai un probleme qui va surement paraitre banale... je dois faire un Vector d'entiers... comprenez bien une liste chainée d'entier. Pro
Vector -> int --> Integer ??? [ par les french texans ]
Bonjour, Je suis en train de faire un projet et je souhaite utiliser un vecteur. Pour cela je le déclare puis l'instancie. Mais quand je veux introdu
ligne en couleur d'une JTable par rapport a un boolean [ par mikomiko ]
Bonjour chers collegues,je voudrais que les fonds de chaque ligne de ma JTable soit ou bleu ou rouge selon le boolean de la colonne "Dispo Location".
vector de vector [ par mdrcedrick ]
bonjour j'ai une JTable avec un Modèle ma table hérite donc de AbstractTableModel j'ai donc plusieurs méthodes à redéfinir dont public Object getVa
JTable et JCheckbox [ par greglover ]
Bonsoir,je sais que l'on va me sauter dessus pour me dire que le sujet a déjà été traité 20 fois mais malgré l'aide que je trouve sur le net, je n'arr
liste camera [ par ramanavy ]
Salut les gars ! en fait je dois gerer une liste d'objet dans des vectors et j'arrive pas a obtenir 10 objets de ma liste, comment vous fait pour parc
vector [ par gigi00 ]
bonjour je veux que ce programme rempli aleatoirement un tableau de 9 saans repition mais j ai un probleme au niveau des colonnes import java.util.V
interface graphique, dessiner un vecteur [ par le_papy ]
bonjour, je suis actuelement en train de developper une petit programme perso (pour aprendre le langage Java) et je souhaite dessiner un dans une fene
Probleme pour Dessiner un graphics avec swing [ par Iko01 ]
Bonjour à tous, voila actuellement je suis sur un petit projet de fin d'année qui consiste à réaliser le jeux "tours de Hanoï" par java, sauf problème
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|