Đây là tôi JTableJTable Cách làm mới mô hình bảng sau khi chèn xóa hoặc cập nhật dữ liệu.
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;
}
tôi sẽ gọi phương pháp này để lấy dữ liệu từ cơ sở dữ liệu và đặt nó vào mô hình bảng
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);
}
Hiện nay tôi đã sử dụng phương pháp này để làm mới bảng sau khi cập nhật bảng dữ liệu. Trước tiên, tôi sẽ xóa bảng
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
tableModel.setRowCount(0);
và sau đó cấu trúc lại mô hình bảng để làm mới jTable. Nhưng tôi đã suy nghĩ là có bất kỳ thực hành tốt nhất hoặc cách tốt hơn để làm điều đó?
gì bạn có nghĩa tôi gọi tableModel.fireTableDataChanged() này mỗi khi tôi cập nhật? – user236501
@ newbie123: Nếu bạn chỉ chèn dòng mới, bạn có thể sử dụng [fireTableRowsInserted] (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/AbstractTableModel.html#fireTableRowsInserted% 28%, 20%% 29%). Mặt khác, việc thực hiện 'DefaultTableModel.addRow' nên đã xử lý ... Bảng của bạn không được làm mới bằng' addRow'? –
Tôi đang sử dụng addRow nó hoạt động nhưng làm thế nào về cập nhật? – user236501