2013-01-22 77 views
1

我有一個包含四列的jTable。第一列保存一些成員代碼,第二列保存其入場日期,第三列保存其驗證到期日期。如果到期日期距離系統日期超過10天,我必須從列中刪除行。在jTable中動態解析日期

我寫的代碼是這樣的:

public void expire(){ 

    try{ 
    DefaultTableModel model = (DefaultTableModel) empTbl.getModel(); 
    int col=2; 
    int rows = empTbl.getRowCount(); 
    for(int row=0; row<=rows; row++){ 

    SimpleDateFormat formater = new SimpleDateFormat("dd-MM-yyyy"); 
    Calendar currentDate = Calendar.getInstance(); 
    String d = formater.format(currentDate.getTime()); 
    Date haatdinPisorTarikh = (Date)formater.parse(d); 

    String expdate = (String)empTbl.getValueAt(row, col); 
    Date expire=(Date)formater.parse(expdate); 
    Calendar expireDate = Calendar.getInstance(); 
    expireDate.add(Calendar.DATE, -10); 

    if(expireDate.after(haatdinPisorTarikh)){ 
    model.removeRow(row); 
    } 
    } 

     }catch(ParseException ex){} 
     } 

這種方法是行不通的。我在哪裏做錯了? 請幫助...

enter image description here

回答

2

最顯著的問題是在循環(顯然)...

int rows = empTbl.getRowCount(); // <-- Get row count, good... 
for(int row=0; row<=rows; row++){ 
    // Make your calculations... 
    if(expireDate.after(haatdinPisorTarikh)){ 
     model.removeRow(row); 
     // Uh-oh, the row count has changed 
     // Also, the row index is no longer valid!! 
    } 
} 

你應該做的,是發生某種行標識符的成java.util.List(不要使用行索引,你會遇到同樣的問題),添加你想要刪除的每一行,並在完成模型掃描後,遍歷「刪除」列表,尋找用標識符將每行索引加起來並將其刪除。

否則,你可以只使用一個table filter,我認爲會顯著容易...

+0

+1指出錯誤。 – StanislavL

2

您可以組織從年底開始。

int rows = empTbl.getRowCount(); 
for(int row=rows-1; row>=0; row--) { 
    //delete from model won't harm your row indexes. 
} 
+0

正確的方法 – mKorbel