java - 在 jTable 中动态解析日期

标签 java swing date 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){}
       }

此方法无效。我在哪里做错了? 请帮助...

enter image description here

最佳答案

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

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我认为这会容易得多......

关于java - 在 jTable 中动态解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14454082/

相关文章:

java - "Pig"游戏Java程序错误

java - 关闭应用程序而不是转到上一个 Activity

java - 是否可以在右键菜单顶部创建一个窗口?

javascript - Javascript 中的时区问题将日期转换为 "Today"、 "Yesterday"、 "2 days ago"等

linux - 需要获取一年中所有星期一的日期

java - 如何使用 Gradle 开发库和使用该库的程序

java - Flash 客户端和 Java 服务器之间的持久连接

java - 使用 java swing 删除导致 NullPointerException 的 Pane

Java- 将文本写入图像,然后写入输出文件

javascript - 我如何告诉 javascript 在序列化时不要将日期对象转换为 UTC