Das ist meine 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;
}
Ich werde diese Methode aufrufen, um die Daten aus der Datenbank abzurufen und in das Tabellenmodell einzufügen
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);
}
Derzeit habe ich diese Methode verwendet, um die Tabelle nach dem Aktualisieren der Tabellendaten zu aktualisieren. Ich werde zuerst den Tisch abräumen
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
tableModel.setRowCount(0);
und strukturieren Sie dann das Tabellenmodell erneut um, damit die jTable aktualisiert wird. Aber ich dachte, gibt es Best Practices oder einen besseren Weg, dies zu tun?
DefaultTableModel.addRow
bereits damit umgehen ... Wird Ihre Tabelle nicht aktualisiert vonaddRow
?setValueAt
,DefaultTableModel
löst das Ereignis aus.javax.swing.table.AbstractTableModel
, da die SchnittstelleTableModel
nicht über die oben erwähnte Methode verfügtDer schnellere Weg für Ihren Fall ist:
Der optimierte Weg, wenn sich eine oder wenige Zellen ändern:
quelle
Versuche dies
quelle
quelle
Wäre es nicht besser zu verwenden
java.util.Observable
und dadurchjava.util.Observer
wird die Tabelle aktualisiert?quelle
Ich habe es so gemacht in meiner Jtable seine automatische Aktualisierung nach 300 ms;
Ich bezweifle, dass es mit einer großen Anzahl von Objekten wie über 500 gut funktioniert. Die andere Möglichkeit besteht darin, TableModelListener in Ihrer Klasse zu implementieren, aber ich habe nicht verstanden, wie man es gut verwendet. Schauen Sie sich http://download.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange an
quelle