Java GUI JTable'刷新'

问题描述:

我正在制作一个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

你的问题可能是由于这个变量: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,根本没有经验,所以我只是想知道东西是如何工作的。所以有什么问题? –