unaware
Messages postés5Date d'inscriptionmardi 24 juin 2008StatutMembreDernière intervention26 septembre 2008
-
26 sept. 2008 à 02:31
unaware
Messages postés5Date d'inscriptionmardi 24 juin 2008StatutMembreDernière intervention26 septembre 2008
-
26 sept. 2008 à 16:18
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.
<!-- BEGIN TEMPLATE: bbcode_code -->
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
<!-- END TEMPLATE: bbcode_code -->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
<!-- BEGIN TEMPLATE: bbcode_code -->
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");
<!-- END TEMPLATE: bbcode_code -->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.
<!-- BEGIN TEMPLATE: bbcode_code -->
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;
}
....
}
<!-- END TEMPLATE: bbcode_code -->L'insertion de ces données se fait via une autre classe "BaseDonnees"
<!-- BEGIN TEMPLATE: bbcode_code -->
System.out.println("Insertion dans la base ++++++++++++++");
.......
}
}
<!-- END TEMPLATE: bbcode_code -->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.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 26 sept. 2008 à 08:44
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?
unaware
Messages postés5Date d'inscriptionmardi 24 juin 2008StatutMembreDernière intervention26 septembre 2008 26 sept. 2008 à 09:47
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.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 26 sept. 2008 à 13:58
Salut:
Excellente idée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
unaware
Messages postés5Date d'inscriptionmardi 24 juin 2008StatutMembreDernière intervention26 septembre 2008 26 sept. 2008 à 14:26
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!
indiana_jules
Messages postés750Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention23 décembre 200822 26 sept. 2008 à 14:49
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 (
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.
unaware
Messages postés5Date d'inscriptionmardi 24 juin 2008StatutMembreDernière intervention26 septembre 2008 26 sept. 2008 à 15:02
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
[file:///D:/docs/api/java/util/Observer.html#update%28java.util.Observable,%20java.lang.Object%29 update]([file:///D:/docs/api/java/util/Observable.html Observable] o,
[file:///D:/docs/api/java/lang/Object.html 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.
indiana_jules
Messages postés750Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention23 décembre 200822 26 sept. 2008 à 15:55
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.