Ceci est mon tableau
private JTable getJTable() {
String[] colName = { "Name", "Email", "Contact No. 1", "Contact No. 2",
"Group", "" };
if (jTable == null) {
jTable = new JTable() {
public boolean isCellEditable(int nRow, int nCol) {
return false;
}
};
}
DefaultTableModel contactTableModel = (DefaultTableModel) jTable
.getModel();
contactTableModel.setColumnIdentifiers(colName);
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
return jTable;
}
J'appellerai cette méthode pour récupérer les données de la base de données et les mettre dans un modèle de table
public void setUpTableData() {
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
ArrayList<Contact> list = new ArrayList<Contact>();
if (!con.equals(""))
list = sql.getContactListsByGroup(con);
else
list = sql.getContactLists();
for (int i = 0; i < list.size(); i++) {
String[] data = new String[7];
data[0] = list.get(i).getName();
data[1] = list.get(i).getEmail();
data[2] = list.get(i).getPhone1();
data[3] = list.get(i).getPhone2();
data[4] = list.get(i).getGroup();
data[5] = list.get(i).getId();
tableModel.addRow(data);
}
jTable.setModel(tableModel);
}
Actuellement, j'utilisais cette méthode pour actualiser la table après la mise à jour des données de la table. Je vais d'abord débarrasser la table
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
tableModel.setRowCount(0);
puis restructurez à nouveau le modèle de table pour qu'il actualise le jTable. Mais je pensais y at-il des meilleures pratiques ou une meilleure façon de le faire?
Si vous souhaitez informer votre JTable
des modifications de vos données, utiliseztableModel.fireTableDataChanged()
De la documentation :
Avertit tous les écouteurs que toutes les valeurs de cellule dans les lignes de la table peuvent avoir été modifiées. Le nombre de lignes peut également avoir changé et le JTable doit redessiner la table à partir de zéro. La structure de la table (comme dans l'ordre des colonnes) est supposée être la même.
Le moyen le plus rapide pour votre cas est:
jTable.repaint(); // Repaint all the component (all Cells).
La manière optimisée de changer une ou plusieurs cellules:
((AbstractTableModel) jTable.getModel()).fireTableCellUpdated(x, 0); // Repaint one cell.
essaye ça
public void setUpTableData() {
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
/**
* additional code.
**/
tableModel.setRowCount(0);
/**/
ArrayList<Contact> list = new ArrayList<Contact>();
if (!con.equals(""))
list = sql.getContactListsByGroup(con);
else
list = sql.getContactLists();
for (int i = 0; i < list.size(); i++) {
String[] data = new String[7];
data[0] = list.get(i).getName();
data[1] = list.get(i).getEmail();
data[2] = list.get(i).getPhone1();
data[3] = list.get(i).getPhone2();
data[4] = list.get(i).getGroup();
data[5] = list.get(i).getId();
tableModel.addRow(data);
}
jTable.setModel(tableModel);
/**
* additional code.
**/
tableModel.fireTableDataChanged();
/**/
}
DefaultTableModel dm = (DefaultTableModel)table.getModel();
dm.fireTableDataChanged(); // notifies the JTable that the model has changed
Ne serait-il pas préférable d'utiliser Java.util.Observable
et Java.util.Observer
pour provoquer la mise à jour du tableau?