JTable使用TableRowSorter时整数列仅按首位数字排序的修复方法
问题根因
你遇到的排序异常是因为JTable的TableModel默认对所有列返回Object.class作为列类型,TableRowSorter处理Object类型时会默认调用对象的toString()方法按字符串字典序排序,才会出现9排在17前面的问题。
最简单修复方案
重写你当前使用的TableModel的getColumnClass(int columnIndex)方法,为整数列指定正确的Integer.class类型即可,原有排序逻辑不需要做任何修改。
示例代码如下:
// 假设你使用的是DefaultTableModel,重写getColumnClass方法 DefaultTableModel tableModel = new DefaultTableModel(表格数据, 列名数组) { @Override public Class<?> getColumnClass(int columnIndex) { // 第7列(你代码里排序的索引为6的列)是整数列,返回Integer类型 if (columnIndex == 6) { return Integer.class; } // 其他列沿用默认的类型判断逻辑 return super.getColumnClass(columnIndex); } }; // 将重写后的Model设置给你的JTable tblProduct.setModel(tableModel);
注意:请确保你的TableModel中第6列存储的实际数据是
Integer类型,如果存的是字符串格式的数字,需要先把对应数据转换为Integer对象再存入Model。
修改完成后TableRowSorter会自动识别Integer类型,按照数值大小完成排序。
内容的提问来源于stack exchange,提问作者Elee
相关产品推荐
相关产品推荐

