【发布时间】:2020-07-26 11:19:29
【问题描述】:
我有一个使用 DefaultTableModel 的 JTable,并且允许在用户单击列标题时进行排序。但是,当用户单击具有整数类型数据的列的标题时,它不会正确排序。它似乎是按字符串而不是整数类型排序的。
这是我将数据实际添加到表中的代码部分:
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);
所以我尝试覆盖该方法并最终得到以下结果:
@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;
}
};
我以前从未覆盖过它,我不太确定它希望我在这里做什么。
【问题讨论】:
-
几乎总是建议覆盖 getColumnClass:不仅(可比较对象的)排序按预期完成,而且通常还处理编辑时的格式化渲染和类型转换。顺便说一句:永远不要从 getColumnClass 返回 null ...