JTable在使用DefaultTableModel插入后无法刷新



带有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没有自动同步。

最新更新