2017-01-22 97 views
-1

我正在製作一個GUI,它包含一個JPanel,在JPanel內部有一個JTable,我想要做的是:當我點擊一個按鈕時,它們都出現了(因爲我' m使用CardLayout)。代碼:Java GUI JTable'刷新'

private void teGjithaButtonActionPerformed(java.awt.event.ActionEvent evt) {            
try { 
    parentPanel.setVisible(true); 
    parentPanel.removeAll(); 
    parentPanel.add(tgjPanel); 
    parentPanel.repaint(); 
    parentPanel.revalidate(); 
    listAllCurtains(); 
} catch (SQLException ex) { 
    Logger.getLogger(MainBrillant.class.getName()).log(Level.SEVERE, null, ex); 
} 

而對於listAllCurtains()的代碼:

public void listAllCurtains() throws SQLException { 
    DefaultTableModel deftm = (DefaultTableModel) allTable.getModel(); 

    if (deftm.getRowCount() != 0) { 
     deftm.setRowCount(0); 
    } 

    stm = (Statement) conn.createStatement(); 
    ResultSet rs = stm.executeQuery("select * from customerregister.curtain inner join curtainrel on curtain.code = curtainrel.curtainCode;"); 
    while (rs.next()) { 
     String shifra = rs.getString("code"); 
     String ngjyra = rs.getString("color"); 
     String emri = rs.getString("name"); 
     double cmimi = rs.getDouble("price"); 
     double sasia = rs.getDouble("amount"); 
     allCurtains.add(new Curtain(shifra, ngjyra, emri, cmimi, sasia)); 
    } 

    Object[] row = new Object[5]; 


    for (int i = 0; i < allCurtains.size(); i++) { 
     row[0] = allCurtains.get(i).getShifra(); 
     row[1] = allCurtains.get(i).getEmri(); 
     row[2] = allCurtains.get(i).getNgjyra(); 
     row[3] = allCurtains.get(i).getCmimi(); 
     row[4] = allCurtains.get(i).getSasia(); 
     deftm.addRow(row); 
    } 

} 

的問題是,當我再次單擊該按鈕沉綿有這部分的代碼,以確保數據的不重複:

if (deftm.getRowCount() != 0) { 
    deftm.setRowCount(0); 
} 

每次按鈕被點擊時,它仍然繼續向表格中插入相同的數據。我無法弄清楚爲什麼會發生這種情況,我非常感謝你的幫助。

+1

退出重新發布相同的問題。你被要求在你的最後一個問題中發佈一個「可運行的例子」。 – camickr

回答

2

你的問題可能是由於這個變量:allCurtains。您不是先清除它,然後繼續添加它,因此所有舊數據仍然保留。

在您的方法開始時,請通過allCurtains.clear();清除此集合。

public void listAllCurtains() throws SQLException { 
    DefaultTableModel deftm = (DefaultTableModel) allTable.getModel(); 

    if (deftm.getRowCount() != 0) { 
     deftm.setRowCount(0); 
    } 
    allCurtains.clear(); // ***** add this ***** 

    // ..... more code 

其他問題:你指出你使用的是CardLayout,但是這CardLayout是沒怎麼用過。

+0

我甚至不會去檢查,因爲你完全正確......非常感謝。 –

+0

@AskingAsker:謝謝你接受這個,但是camickr是對的 - 你應該改進原來的問題,並在那裏提供一個可行的[mcve]。否則,對於那些以前努力幫助你的人來說,你並不公平。事實上,你似乎完全忽略了那裏提供的答案,因爲你既沒有對它進行投票(我做過),也沒有接受它,或者對它進行了評論。請至少糾正這對DevilsHnd公平和他的努力。 –

+0

我剛開始使用GUI,根本沒有經驗,所以我只是想知道東西是如何工作的。所以有什麼問題? –