1

我有一个包含三列的表:名称 | 日期时间 | 描述

在此处输入图像描述

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 进行适当的排序?

谢谢你

PS这是填充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 - 我将如何解决这个问题?

4

1 回答 1

1

我不确定,但如果你想将 Date 对象显示为指定格式,如 yyyy/MM/dd - HH:mm,为什么不试试渲染器呢?

于 2012-08-28T15:40:33.843 回答