我有一个使用DefaultTableModel的JTable,我允许在用户点击列标题时进行排序.但是,当用户单击具有integer类型数据的列的标头时,它不能正确排序.它似乎是按String而不是整数类型排序.
这是我的代码中我实际将数据添加到表中的部分:
DefaultTableModel aModel = (DefaultTableModel) mainView.logEntryTable.getModel();
ResultSetMetaData rsmd; try {
mainView.logEntriesTableModel.setRowCount(0);
rsmd = rs.getMetaData();
int colNo = rsmd.getColumnCount();
while(rs.next()){
Object[] objects = new Object[colNo];
for(int i=0;i<colNo;i++){
objects[i]=rs.getObject(i+1);
}
aModel.addRow(objects);
count++;
}
mainView.logEntryTable.setModel(aModel);
mainView.logEntryTable.getColumnModel().getColumn(0).setMaxWidth(80);
Run Code Online (Sandbox Code Playgroud)
所以我试图覆盖该方法并最终得到:
@Override
public Class<?> getColumnClass(int columnIndex){
if( columnIndex == 0){
// Return the column class for the integer column
}else{
// Return the column class like we normally would have if we didn't override this method
}
return null;
}
};
Run Code Online (Sandbox Code Playgroud)
我以前从未覆盖过这个,我不太清楚我在这里做什么.
我有一个JTable并添加了排序.现在,JTable有5列,日期字段中的第2列转换为DD/MM/YYYY,并显示在单元格的JTextField中.
当我将它排序为字符串并且我将日期混淆时,如何更改该特定列的排序行为?
例如.按照ASC顺序排序后,我得到了这个:
01/02/2012
01/03/2011
01/04/2011
01/05/2011
01/06/2011
01/07/2011
01/08/2011
01/09/2011
01/10/2011
01/12/2011
Run Code Online (Sandbox Code Playgroud)
这是错的,我应该得到结果
01/03/2011
01/04/2011
01/05/2011
01/06/2011
01/07/2011
01/08/2011
01/09/2011
01/10/2011
01/12/2011
01/02/2012
Run Code Online (Sandbox Code Playgroud)
我的代码现在看起来像这样排序
List<SortKey> sortKeys = new ArrayList<SortKey>();
sortKeys.add(new SortKey(2, SortOrder.ASCENDING));
table.getRowSorter().setSortKeys(sortKeys);
Run Code Online (Sandbox Code Playgroud)
我应该仅针对该特定列更改哪些内容?