僅呼叫 frame.repaint() 或 table.repaint(),**不更新 TableModel**,視圖無資料可繪 → 介面不變。
JTable 透過 TableModel 獲取資料。TableModel 方法修改,並觸發 TableModelEvent。
class MyModel extends AbstractTableModel {
List data = new ArrayList<>();
public void setData(List newData) {
this.data = newData;
fireTableDataChanged(); // 通知 JTable 重新讀取所有儲存格
}
// 實作 getRowCount, getColumnCount, getValueAt...
}
table.setModel(new MyModel(newData)); // 新模型自動觸發重繪
// 或
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0);
newData.forEach(row -> model.addRow(row.toArray()));
new Thread(() -> {
List fresh = fetchFromDB();
SwingUtilities.invokeLater(() -> tableModel.setData(fresh));
}).start();
JTable 刷新數據的幾種方法 (CSDN) — 含完整代碼範例。