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
vecteur d'entier [ par nadap ]
Salut à tous, j'ai un probleme avec un vecteur d'entier.j'inserte des int dans un vecteur et quand je veux les recupérer plus tard, il me parle d'inco
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|