You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:27:03