JTable Comment faire pour actualiser un modèle de table après l'insertion de supprimer ou de mettre à jour les données.
C'est ma jTable
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;
}
Je vais appeler cette méthode pour récupérer les données à partir de la base de données et le mettre en 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'ai été en utilisant cette méthode pour actualiser le tableau après la mise à jour de la table de données. Je vais d'abord effacer la table
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
tableModel.setRowCount(0);
puis restructurer le modèle de table de nouveau donc, il va vous rafraîchir la jTable. Mais je pensais est-il des pratiques exemplaires ou meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez annoncer votre
JTable
sur les modifications de vos données, utiliseztableModel.fireTableDataChanged()
De la la documentation:
DefaultTableModel.addRow
doit déjà gérer que... ce N'est pas votre tableau actualisé paraddRow
?setValueAt
,DefaultTableModel
les feux de l'événement.javax.swing.table.AbstractTableModel
, depuis l'interfaceTableModel
n'ont pas la méthode mentionnée ci-dessusLe moyen plus rapide pour votre cas est:
Le optimisé façon, lorsque l'une ou quelques cellules changement:
essayer cette
Ne serait-il pas préférable d'utiliser
java.util.Observable
etjava.util.Observer
qui sera la cause de la table à mettre à jour?J'ai fait comme ça dans ma Jtable son autorefreshing après 300 ms;
Je doute que cela va faire du bien, avec un grand nombre d'objets, tels que plus de 500, seule autre façon est de mettre en œuvre TableModelListener dans votre classe, mais je ne comprenais pas comment bien l'utiliser. regardez http://download.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange