我有一个由三列组成的表:名称|日期时间|描述
Date-Time的值实际上存储在数据库表中的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,因此12/28/2011比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;
}
它似乎现在有效,但日期显示为2012年10月26日,而不是yyyy / MM / dd - HH:mm - 我将如何解决这个问题?
答案 0 :(得分:1)
我不确定,但是如果你想像Yyyy / MM / dd -HH:mm那样显示Date对象作为指定格式,为什么不尝试渲染器?