0
Java程序GUI控制使用的DefaultTableModel Derby數據庫插入後刷新:JTable中不使用的DefaultTableModel
我已經成功地插入一條新記錄到我的數據庫的方法。當我重新啓動程序時,新記錄在JTable(GUI)中可見。但是,我無法讓JTable快速刷新並顯示添加的記錄。
我已閱讀了很多回答的問題,但到目前爲止還沒有任何解決方法。任何想法?
GUI類:
public class GUIClients {
ClientDatabase cDB = new ClientDatabase();
DefaultTableModel tableModel = new DefaultTableModel();
JTable table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table);
JPanel panel = new JPanel(new BorderLayout());
public JPanel createPanel() {
cDB.createTable(tableModel);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
panel.add(scrollPane);
panel.add(table, BorderLayout.CENTER);
panel.add(table.getTableHeader(), BorderLayout.NORTH);
...
return panel;
}
插入帶有保存按鈕對話:
public class InsertDialog extends GUIClients {
...
saveB = new JButton("Save");
saveB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
cl = cDB.getClient(InsertDialog.this);
cDB.insert(cl);
tableModel.setRowCount(0);
cDB.createTable(tableModel);
table.setModel(tableModel);
dialogPanel.dispose();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
});
dialogPanel.add(saveB);
...
方法從數據庫中的數據創建的DefaultTableModel:
public class ClientDatabase implements Database {
public static ResultSet rs;
public void createTable(DefaultTableModel d) {
try {
d.addColumn("ID");
d.addColumn("Name");
d.addColumn("Surname");
d.addColumn("Mobile");
d.addColumn("Email");
d.addColumn("Notes");
rs.beforeFirst();
while (rs.next()) {
int id = rs.getInt("ID");
String name = rs.getString("NAME");
String surname = rs.getString("SURNAME");
String mobile = rs.getString("MOBILE");
String email = rs.getString("EMAIL");
String notes = rs.getString("NOTES");
d.addRow(new Object[]{id, name, surname, mobile, email, notes});
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
...
我做錯了嗎?我刪除DefaultTableModel中的所有行,然後像這樣重新創建它: 'tableModel.setRowCount(0);' 'cDB.createTable(tableModel);' – Gussmayer 2015-03-30 20:32:45
@Gussmayer,你還沒有重新創建ResultSet。我猜測ResultSet中的數據是舊數據。那是插入前的數據。我認爲你需要做一個新的查詢。另外,您不應該將列添加到TableModel。數據模型已經包含適當數量的列。你想要做的就是刷新行。 – camickr 2015-03-31 01:05:19
DefaultTableModel沒有問題。它會在插入任何內容後立即更新。儘管如此,JTable並未更新。 – Gussmayer 2015-04-01 15:17:41