2015-03-30 57 views
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()); 
    } 

} 
... 

回答

1

我已經成功地將一條新記錄插入到我的數據庫中。

然後,您還負責將數據同時添加到TableModel。

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

或者另一種方法是重新執行查詢,然後使用JTable.setModel(...)方法將新的TableModel替換爲新的TableModel。

數據庫和TableModel沒有自動同步。

+0

我做錯了嗎?我刪除DefaultTableModel中的所有行,然後像這樣重新創建它: 'tableModel.setRowCount(0);' 'cDB.createTable(tableModel);' – Gussmayer 2015-03-30 20:32:45

+0

@Gussmayer,你還沒有重新創建ResultSet。我猜測ResultSet中的數據是舊數據。那是插入前的數據。我認爲你需要做一個新的查詢。另外,您不應該將列添加到TableModel。數據模型已經包含適當數量的列。你想要做的就是刷新行。 – camickr 2015-03-31 01:05:19

+0

DefaultTableModel沒有問題。它會在插入任何內容後立即更新。儘管如此,JTable並未更新。 – Gussmayer 2015-04-01 15:17:41