有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JTable在使用DefaultTableModel插入后未刷新

Java程序,GUI使用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());
    }

}
...

共 (1) 个答案

  1. # 1 楼答案

    I've a method which successfully inserts a new record to my database.

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

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

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

    数据库和TableModel没有自动同步