我有一个由三列组成的表:Name |日期时间|说明对JTable进行排序代表时间的2列
的日期 - 时间值实际存储在数据库中的表和2个独立的字段(过时的数据库 - 不能改变,所以必须解决它)。
我应用了下面的代码:
tbNotes.setAutoCreateRowSorter(true); //tbNotes is the JTable
DefaultRowSorter sorter = ((DefaultRowSorter) tbNotes.getRowSorter());
ArrayList list = new ArrayList();
list.add(new RowSorter.SortKey(2, SortOrder.DESCENDING)); //column 2 because I have an invisible ID column
sorter.setSortKeys(list);
sorter.sort();
产生的结果似乎正确的 - 该行按日期出现向底部旧项目排序。然而,有时我会看到:
很明显,排序查看字符串中的第一个字符并假定1大于0,因此2011年12月28日比01/03更大(更新)/2012
我该如何着手对我的JTable进行适当的排序?
谢谢你
P.S.下面是用于填充JTable中的代码
try {
DefaultTableModel noteDataModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
tbNotes.setModel(noteDataModel);
Object[] objects = new Object[4];
ListIterator<Todonote> todoNoteListIterator = noteList.listIterator();
while (todoNoteListIterator.hasNext()) {
todoNoteEntity = todoNoteListIterator.next();
DateFormat noteDateFormatter = new SimpleDateFormat("MM/dd/yyyy");
String noteDateTime = noteDateFormatter.format(todoNoteEntity.getUserDate())
+ " - " + todoNoteEntity.getUserTime().substring(0, 2) + ":" + todoNoteEntity.getUserTime().substring(2);
objects[0] = todoNoteEntity.getPrimaryKey();
objects[1] = todoNoteEntity.getUserContact().getName();
objects[2] = noteDateTime;
objects[3] = todoNoteEntity.getNotes();
noteDataModel.addRow(objects);
}
编辑1
我更新了
@Override
public Class getColumnClass(int column) {
for (int row = 0; row < getRowCount(); row++) {
Object o = getValueAt(row, column);
if (o != null) {
return o.getClass();
}
}
return Object.class;
}
似乎现在的工作表模型,但是日期显示为10月26日,2012而不是yyyy/MM/dd - HH:mm - 我会如何解决这个问题?
看到此[SO](http://stackoverflow.com/questions/4553448/jtable-sorting-specific-field) – Sal
@Sal是的,我看到它,但遇到麻烦实施它。最后,我对原始帖子进行了编辑。我有点工作,但格式化程序出了问题 - 也许你知道答案。 –