[英]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.