Hello,

Je dispose d'une JTable utilisée pour représenter une table SQL dans une base de donnée. L'utilisateur à la possibilité de modifier les champs de la table SQL à afficher dans cette JTable.

Lorsque je charge la table pour la première fois, aucun problème, tout s'affiche bien. En revanche, lorsque l'utilisateur décide de changer la liste des champs, je n'arrive pas a mettre à jours l'affichage de ma table avec les nouvelles colonnes/valeurs.

Le modèle de la table est donné par une classe DBViewerTableModel qui hérite de AbstractTableModel. A prioris j'ai bien défini celle-ci puisque la table s'affiche très bien la première fois. Lorsque l'utilisateur modifie les champs à afficher, je recharge simplement l'ensemble des données avec les champs qui vont bien via un ResultSet. A partir de la je met a jours les données de mon modèle, puis j'appele la méthode fireTableStructureChanged sur mon modèle.

Malheureusement comme dit précédement ca ne marche pas, rien ne se passe; en mettant un print dans les méthodes getValueAt ou getColumnName, rien ne s'affiche. J'ai essayé repaint et revalidate sur la JTable en plus de cela, mais rien n'y fait... J'affiche également la mise a jours de mon modèle via. le nom des nouvelles colonnes, et les données sont bien mises a jours... J'ai essayé de recréer un nouveau modèle à chaque changement, toujours rien... :S Il faut que je ferme ma fenetre et que je réouvre la vue pour obtenir la table avec les nouveaux champs à afficher...

Quelqu'un aurait-il une idée? Est-ce que j'ai sauté une étape?

Voici un bout de code représentant la méthode que j'appele lorsque je doit mettre a jours ma table (c'est également celle que j'appelle lorsque je charge la table pour la première fois):
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 void refresh() {
    (...)
 
    ResultSet rs = database.retrieveTable(fieldsToDisplay) ;
    if(this.model == null) {
        this.model = new DBViewerTableModel(rs) ; 
        // Notez que ma table est contenue dans un JScrollPane 
        // qui est variable d'instance d'une classe qui hérite de JPanel,
        // ici représenté par la variable d'instance tablePanel
        this.tablePanel.setTableModel(this.model) ;
    }
    else this.model.setData(rs);
 
    this.model.fireTableStructureChanged() ;
    rs.close();
 
    (...)
}