使用DefaultTableModel插入后,JTable不会刷新

时间:2015-03-30 19:55:01

标签: java database swing jtable defaulttablemodel

使用DefaultTableModel的GUI控制derby数据库的Java程序:

我是一种成功将新记录插入数据库的方法。当我重新启动程序时,新记录在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());
    }

}
...

1 个答案:

答案 0 :(得分:1)

  

我是一种成功将新记录插入数据库的方法。

然后,您还负责同时将数据添加到TableModel。

您可以使用DefaultTableModel的addRow(...)insertRow(..)方法更新TableModel中的日期,然后更新JTable。

或者另一种方法是重做查询,然后使用JTable.setModel(...)方法将旧的TableModel替换为新的TableModel。

没有自动同步数据库和TableModel。