begin process at 2010 02 10 11:52:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Multimédia

 > 

Java2D

 > 

mise à jour automatique de jtable à partir de BD


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Ombitious_Developper

Salut:

Excellente idée.


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales