1

我有一个有四列的 jTable。第一列包含一些成员代码,第二列包含他们的入会日期,第三列包含他们的验证到期日期。如果到期日期距系统日期超过 10 天,我必须从列中删除行。

我正在编写这样的代码:

    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){}
       }

这种方法不起作用。我在哪里做错了?请帮忙...

在此处输入图像描述

4

2 回答 2

2

您可以从头开始组织。

int rows = empTbl.getRowCount(); 
for(int row=rows-1; row>=0; row--) {
    //delete from model won't harm your row indexes.
}
于 2013-01-22T09:08:59.737 回答
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!!
    }
}

您应该做的是将某种行标识符放入 a 中java.util.List(不要使用行索引,您会遇到同样的问题),将要删除的每一行添加到其中并在完成扫描后在模型中,遍历“删除”列表,通过标识符查找每行索引并将其删除。

否则你可以只使用我认为会更容易的表格过滤器......

于 2013-01-22T08:34:53.767 回答