繁体   English   中英

在jTable中动态解析日期

[英]Parsing Date dynamically in a jTable

我有一个有四列的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){}
       }

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

在此输入图像描述

最重要的问题是你的循环(显然)......

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 (不要使用行索引,你会遇到同样的问题),将你要删除的每一行添加到它之后已完成模型的扫描,遍历“删除”列表,按标识符查找每个行索引并将其删除。

否则你可以使用一个表格过滤器 ,我认为这会更容易...

您可以组织从头开始。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM