带有GUI的Java程序使用DefaultTableModel:控制derby数据库
我有一个方法可以成功地将新记录插入到我的数据库中。当我重新启动程序时,新记录在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());
}
}
...
我有一个方法可以成功地将新记录插入到我的数据库中。
然后,您还负责同时将数据添加到TableModel中。
您可以使用DefaultTableModel的addRow(...)
或insertRow(..)
方法来更新TableModel中的日期,然后将更新JTable。
或者另一种方法是重做查询,然后使用JTable.setModel(...)
方法将旧的TableModel替换为新的TableModel。
数据库和TableModel没有自动同步。