2012-08-28 28 views
1

我有一个由三列组成的表:Name |日期时间|说明对JTable进行排序代表时间的2列

enter image description here

的日期 - 时间值实际存储在数据库中的表和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(); 

产生的结果似乎正确的 - 该行按日期出现向底部旧项目排序。然而,有时我会看到: enter image description here

很明显,排序查看字符串中的第一个字符并假定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 - 我会如何解决这个问题?

+1

看到此[SO](http://stackoverflow.com/questions/4553448/jtable-sorting-specific-field) – Sal

+0

@Sal是的,我看到它,但遇到麻烦实施它。最后,我对原始帖子进行了编辑。我有点工作,但格式化程序出了问题 - 也许你知道答案。 –

回答

1

我不确定,但是如果你想显示一个Date对象作为指定的格式,比如yyyy/MM/dd - HH:mm,为什么不试试Renderer?

+0

我的意思是TableCellRenderer – bradwoo8621