2017-01-22 11 views
-1

GUIを作成していて、JPanelを含んでいます。その中にJPanelがあります.JTableがあります。私がしたいことは:ボタンをクリックすると、 CardLayoutを使って)。コード:Java GUI JTable 'refreshing'

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を使って作業を始めました。全く経験がありませんでした。だから問題は何ですか? –