Raffraichir un Jtable

aurel_kb Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'aimerai savoir si quelqu'un as une idée sur comment raffraichir le contenu d'un Jtable donc se trouve dans un tableau data (donnees extraient de la base de donnée).
En faite j'ai ma fenêtre principale contenant un Jtable, le jtable est dans un Jscrolpanel et le jscrol dans un panel. lorsque j'appelle la classe d'interface d'ajout d'un biens immobilier , l'enregistrement dans la BD se passe bien, mais les procedure repaint du panel ou scrol, ou jtable n'affiche pas le nouvel enregistrement effectue sauf si je redemare la fenêtre principal. tres bizard.


dans la fenêtre principale j'appelle la procedure remplirTab()

ensuite j'instancie le Jtable avec le data qui a été rempli
TabBien = new JTable(data, columns);

procedure pour remplir le tableau data utilisé dans le Jtable
public void remplirTab() throws IOException {
// TODO Auto-generated method stub
// Accès à la BD
try {

//Connection à la bd
conn = Fonctions.getConnection();
stat = conn.createStatement();
//selection de tous les données de la table catégorie
rs = stat.executeQuery("SELECT * FROM biencategtype");

rs.last();
int nombreLignes = rs.getRow();
rs.beforeFirst();
data = new String[nombreLignes][11];
//indexCat = new int[nombreLignes];
//test si on a un resultat positif
int i=0;
while(rs.next()){

//"ID","Date","Référence","Nom","Catégorie","Type","Surface(m²)","Prix(Euro)"};

data[i][0]=rs.getString("Id");
data[i][1]=rs.getString("datecreation");
data[i][2]=rs.getString("Ref");
data[i][3]=rs.getString("nom");
data[i][4]=rs.getString("categorie");
data[i][5]=rs.getString("type");
data[i][6]=rs.getString("surface");
data[i][7]=rs.getString("prix");
data[i][8]=rs.getString("description");
//initTab();
i++;
}

stat.close();
conn.close();

} catch (SQLException ex) {
new Message(ex.getMessage());
}
}

Dans la fenêtre d'ajout d'un bien, apres validation je faite ceci
ab ici est la fen^tre principal instancie dans la classe de connexion si l'utilisateur reusir a se connecté.

Connect.ab.remplirTab(); //j'appel remplirTab() pour mettre a jour le data
//Connect.ab.pan.validate();
//Connect.ab.pan.removeAll();
Connect.ab.pan.repaint(); // mise a jour du panel
Connect.ab.scrolTabBien.validate(); //mise a jour du scrol
Connect.ab.scrolTabBien.repaint();
frame.dispose(); //fermeture de la fenêtre d'ajout et retour sur la fenêtre principale.

j'ai tout essayé mais rien ne marche.
Merci pour vos solutions

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il est toujours mieux d'utiliser les Model lorsqu'ils existent, ils disposent de méthodes pour manipuler les données qui sont bien plus adaptées que les méthodes des composants d'affichage qui sont uniquement là pour afficher !

Exemple (il faudrait tester, car je n'ai pas de BDD sous la main)

/**
 * @param sql an SQL statement to be sent to the database, typically a static SQL SELECT statement
 * @param columns array of column identifiers
 * @return a new data source for a table
 */
public static TableModel getData(String sql, String...columns)
{
    DefaultTableModel dataModel = new DefaultTableModel();
    dataModel.setColumnIdentifiers(columns);
    
    try
    {
    	Connection conn = Fonctions.getConnection();
        Statement stat = conn.createStatement();
        ResultSet rs = stat.executeQuery(sql);
	stat.close();
	conn.close();
        
        while (rs.next())
        {
            String[] rowData = new String[columns.length];
            for (int i=0; i<columns.length; i++)
                rowData[i] = rs.getString(columns[i]);
            dataModel.addRow(rowData);
        }
    }
    catch (Exception e)
    {
    	new Message(e.getMessage());
    }

    return dataModel;
}

JTable TabBien = new JTable();

TableModel dataModel = getData("SELECT * FROM biencategtype", "Id", "datecreation", "Ref", "nom", "categorie", "type", "surface", "prix", "description");
TabBien.setModel(dataModel);
La confiance n'exclut pas le contrôle
0