我有一个包含四列的 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
(不要使用行索引,你会遇到同样的问题),添加每个将要删除的行添加到其中,在完成模型扫描后,遍历“删除”列表,按标识符查找每一行索引并将其删除。
否则你可以使用 table filter我认为这会容易得多......
关于java - 在 jTable 中动态解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14454082/