Bonjour,
je sais que le sujet a été abordé plus d'une fois. Mais après avoir parcouru le forum, les tutos, et le site de sun. Je n'arrive toujours pas a faire marcher mon boutton qui devrait raffrachir la JTable.
J'ai créer la classe Table qui extends AbstractTableModel et implémenté le getValueAt et setValueAt comme expliqué sur le site de sun.
Dans ma fenêtre j'initialise ma JTable, je fais un setModel(Table())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 import javax.swing.table.AbstractTableModel; public class Table extends AbstractTableModel{ Object donnees[][]; String titres[]; public Table(Object donnees[][], String titres[]) { this.donnees = donnees; this.titres = titres; } public int getColumnCount() { return donnees[0].length; } public Object getValueAt(int parm1, int parm2) { return donnees[parm1][parm2]; } public int getRowCount() { return donnees.length; } public String getColumnName(int col){ return titres[col]; } public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } public void setValueAt(Object value, int row, int col) { donnees[row][col] = value; fireTableDataChanged(); } public void setDonnees(Object[][] donnees) { this.donnees = donnees; super.fireTableDataChanged(); } }
rep.selectAll() remplie une List par rapport au résultat d'un requete "SELECT * FROM personnes"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Tableau = new javax.swing.JTable(); private String[] s = new String [] {"Nom", "Prenom", "Rue", "Ville", "Département", "Tel", "mail" }; private Object[][] rowNull = new Object[][]{{null, null, null, null, null, null, null}}; private Table model = new Table(rowNull, s); . . . . Tableau.setModel(model = new Table(rep.remplirTab(), s)); jScrollPane1.setViewportView(Tableau); . . . . //Boutton raffraichir private void refreshButtonActionPerformed (java.awt.event.ActionEvent evt) { int x = 0; rep.selectAll(); Object[][] liste = rep.remplirTab(); while(x<=Tableau.getColumnCount()){ Tableau.setValueAt(liste[x][0], x, 0); Tableau.setValueAt(liste[x][1], x, 1); Tableau.setValueAt(liste[x][2], x, 2); Tableau.setValueAt(liste[x][3], x, 3); Tableau.setValueAt(liste[x][4], x, 4); Tableau.setValueAt(liste[x][5], x, 5); Tableau.setValueAt(liste[x][6], x, 6); x++; } }
public Object[][] remplirTab() rempli le tableau qui permet de construire la JTable.
Voila voila, merci d'avance
Edit:
Bonjour,
Je n'ai toujours pas résolu mon problème
Si quelqu'un passe par la et peux m'aider.
J'ai testé ca
J'ai créé une fonction refresh dans ma classe Repertoire
La fonction SelectAll():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public void refresh(DefaultTableModel tableModel){ Vector column = new Vector(); column.addElement("Prénom"); column.addElement("Nom"); column.addElement("tel"); column.addElement("mail"); personnes = null; personnes = DBServeur.getInstance().SelectAll(); Vector rows = new Vector(); for(Personne o:personnes){ Vector row = new Vector(); row.addElement(o.getPrenom()); row.addElement(o.getNom()); row.addElement(o.getTel()); row.addElement(o.getMail()); rows.addElement(row); } tableModel.setDataVector(rows, column); }
Quand j'appuie sur mon bouton Actualiser:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public List SelectAll(){ try { stmt = conn.createStatement(); if (stmt.execute("SELECT * FROM personnes")) { rs = stmt.getResultSet(); } while(rs.next()){ personne = new Personne(rs.getString(3), rs.getString(2), rs.getString(4), rs.getString(5), rs.getInt(6),rs.getString(7),rs.getString(8)); personnes.add(personne); } personne = null; rs.close(); stmt.close(); return personnes; }
Le test n'ai pas concluant, ca me rajoute le vecteur a ma JTable mais sans effacer ce qu'il y avait avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DefaultTableModel tableModel = (DefaultTableModel)Tableau.getModel(); rep.refresh(tableModel);
Edit 2:
J'ai réglé mon problème. Pour ceux que ça intéresse le problème venait de ma List que retournait mon DBServeur avec la méthode selectAll (qui retourne une List d'objet obtenue avec un " SELECT * FROM ).
J'avais définie la List comme ca -> private List<Personne> personnes;
le problème était qu'a chaque exécution de la fonction selectAll, la List personnes ajoutait le résultat de la requête a ses ancien résultat :s
La réponse était toute simple il suffisait d'initialiser la List dans ma fonction.
A+
Partager