Rafraichir JTable - Java - Programmation
Marsh Posté le 08-02-2008 à 18:45:50
salut,
J'ai le meme probleme.
J'utilise une JTable qui contient des informations d'un sgbdoo.
le probleme est que quand je valide, ca n'apparait pas dans ma JTable.
Il faut que j'arrete le programme et que je le run pour visualiser la ligne rajouter.
Ce que j'aimerai avoir, c'est que ca apparait tout de suite quand je valide.
Aurais-tu trouver depuis le temps que ta posté ce message ?
merciiiiiiiiiiii
Marsh Posté le 09-02-2008 à 00:40:33
Normalement, ça devrait fonctionner comme sur des roulettes. Mais pour cela, il faudrait déjà que le modèle du tableau (l'instance de la classe qui implémente TableModel) soit juste un modèle de données ! Pas un modèle ET un accesseur de données persistantes !
Moralité : commmencez tous les 2 par séparer votre gestion des données à présenter dans le tableau Swing (en clair, la classe qui implémente TableModel) et votre code qui interroge votre base de données dans 2 classes bien séparées (la seconde faisant des setValueAt() pour modifier l'instance de la première), et vous verrez, tout marchera tout de suite beaucoup mieux. Et en plus, votre code sera beaucoup mieux écrit (puisque votre gestion de tableau Swing sera beaucoup plus indépendante de la manière dont les données sont obtenues), donc plus facile à maintenir et à faire évoluer.
Note : Dans ton code, tequilla, tu appelles "fireTableChanged(null);" (avec le magnifique commentaire "// Tell the listeners a new table has arrived." ). Si tu ne précises pas ce qui a changé (avec une instance appropriée de TableModelEvent, qu'attend cette opération), ça ne risque pas de faire grand chose... Ou ne serait-ce pas plutôt un "fireTableDataChanged();" que tu chercherais à faire ? Ceci dit, tu gagneras beaucoup à appliquer ma première préconisation plutôt qu'à juste appeler "fireTableDataChanged()", car si tu le fais, ton code sera bien meilleur, et tu n'auras même plus besoin de jouer du fireXXX() pour que ça marche.
Marsh Posté le 09-02-2008 à 11:47:18
salut,
en faite, j'aimerai juste rafraichir ma JTable avec mon bouton valider:
public void actionPerformed(ActionEvent e) {
int nbprestation = 0;
DefaultTableModel tm = new DefaultTableModel();
ObjectContainer db = Db4o.openFile("coiffure.yap" );
Collection<Prestation> prestations = db.query(Prestation.class);
for(Prestation instance : prestations){
tm.addRow(new Object[]{
instance.getNum(),instance.service(),instance.cout(),instance.getDate()});
ca += instance.cout();
nbprestation+=1;
}
Object coupes = coupe.getSelectedItem();
coupe.getSelectedIndex();
//////////////////////////pour coupe homme////////////////////////////////////////
if(coupes.equals("Coupe homme" )){
InterfaceService is1=new CoupeHomme();
if(brushing.isSelected()){
is1=new Brushing(is1);
}
if(couleur.isSelected()){
is1=new Couleur(is1);
}
if(permanante.isSelected()){
is1=new Permanante(is1);
}
Object source = e.getSource();
if(source == valider){
nbprestation= nbprestation+1;
Prestation p1 = new Prestation (nbprestation,new Date(),is1);
labtotal.setText("Total = "+is1.cout() );
db.set(p1);
System.out.println("homme" );
/////////ajouter ici pour rafraichir la JTable/////////
}
db.close();
}
Marsh Posté le 10-02-2008 à 16:46:55
J'avoue n'avoir pas tout lu mais si ça peut vous aider, entre autre avec le fireTableCellUpdated(row, col); :
http://mnasrawin.free.fr/index.php [...] nt-jtable/
Marsh Posté le 20-02-2008 à 14:58:07
merci, je vais essayer ca car j'avais mis ce truc en suspend pour autre chose car pas le temps depuis quelques mois
Marsh Posté le 24-02-2008 à 18:42:51
salut,
mes données present dans la JTable ne sont pas a fixées en durs, c'est pour ce la que j'utilise un DefaultTableModel.
Quelque a-t-il une idée car ca fait bientot 1 mois que je galère la dessus.
Aidez svp merci .
Marsh Posté le 29-06-2007 à 17:37:07
Bonjour,
je voudrais rafraichir ma JTable à chaque fois que je clique sur le bouton "valider". J'essaie le fireTableDataChanged(), le repaint(), cacher et rendre visible de nouveau la Jtable et je n'y arrive pas. J'ai lu des trucs sur le fireTableDataChanged mais je dois mal m'y prendre, pouvait vous m'aider svp?