`
zhang_xzhi_xjtu
  • 浏览: 538563 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[code] 继承TableRowSorter的一个小陷阱

    博客分类:
  • java
 
阅读更多
在一个JTable里面想做sorting。
继承了TableRowSorter覆盖了getComparator方法。返回了基于底层model的各个列特化的Comparator。
原本期望就可以sorting了,但是失败了,抛ClassCast异常。因为底层model有一个列里面的类型是没有实现Comparable的。
有问题,问源码。
DefaultRowSorter的compare方法调用过程中需要调用useToString来决定是否在排序之前把底层modle的值转换为string.
而TableRowSorter里面覆盖了useToString方法。
    protected boolean useToString(int column) {
        Comparator comparator = super.getComparator(column);
        if (comparator != null) {
            return false;
        }
        Class columnClass = getModel().getColumnClass(column);
        if (columnClass == String.class) {
            return false;
        }
        if (Comparable.class.isAssignableFrom(columnClass)) {
            return false;
        }
        return true;
    }

由于有super的存在,覆盖的getComparator方法在这一步是没有被调到的。而TableRowSorter的父类DefaultRowSorter的getComparator这时对model里面没有实现Comparable的列是返回null的。于是在对这个列做排序的时候就是先转换为string再排序了。但是排序的时候用到了这个列特化的Comparator,所以类型转换失败。
知道了原因,解决方法很简单,覆盖掉useToString方法就好了。
分享到:
评论

相关推荐

    aws-codebuild-jenkins-plugin, 一个插件,允许Jenkins用户使用 AWS CodeBuild运行一个构建.zip

    aws-codebuild-jenkins-plugin, 一个插件,允许Jenkins用户使用 AWS CodeBuild运行一个构建 AWS CodeBuild插件Jenkins CodeBuild插件为Jenkins项目提供了一个构建步骤。 设置 Jenkins我们已经写了一个博客帖子,以...

    百度地图所有城市对应的citycode;百度地图城市和城市code数据

    在提供的压缩包文件“BaiduMap_cityCode_1102.txt”中,我们预计会找到一个文本文件,其中包含了中国所有城市及其对应的citycode。这个文件通常以键值对的形式组织,每一行代表一个城市,格式可能是“城市名 city...

    一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0

    想下载Google code中的源码 不需要装各种软件,只需要一个小工具即可! 如何使用? 访问一个谷歌开源项目网站,比如:https://code.google.com/p/deguang-tickets-helper/ ,选择Source选项卡: 运行软件 在版本库...

    pb打印条码(39code,128code)

    它分为三个子集,每个子集都有一个特定的起始字符,使得Code 128能适应各种应用场景。Code 128的校验机制更加严谨,纠错能力更强,因此在物流、库存管理等需要高精度的场合广泛应用。 在Print Basic(PB)环境下,...

    codeMirror代码格式化(官方demo)

    在网页应用中,CodeMirror常被用于提供一个交互式的代码编辑界面,让用户能够直接在浏览器中编写、编辑和格式化代码。这款编辑器不仅外观简洁,而且功能强大,能满足开发人员和学习者的各种需求。 1. **CodeMirror...

    Eclipse离线版插件CodeMix3

    它是一个强大的多语言开发插件,旨在提供一个统一的平台,让开发者可以在Eclipse环境中无缝地进行Web、移动以及云应用的开发。CodeMix3支持多种流行的技术栈,包括JavaScript、TypeScript、React、Angular、Vue.js、...

    codecombat:学习如何编码的游戏.zip

    在codecombat-master这个压缩包中,包含的是CodeCombat开源项目的源代码,这为学习者提供了一个深入了解游戏工作原理的平台。通过研究这些源代码,你可以了解到如何将编程逻辑与游戏交互相结合,以及C#在实际项目中...

    基于CodeMirror的一个在线sql编辑工具

    * 左侧提供数据库表字段树形结构,可拖拽到sql编辑框。 * 输入首字母可提示表名字段名(表名字段名可自定义) 。 *括号高亮匹配。 * 执行与中断功能。 * 自定义外部接口获取sql关键词、函数、表字段等,用于sql编辑...

    C# 绘制Code128 auto条码

    2. **计算检查字符**:Code128要求每个条形码包含一个检查字符,以确保数据的准确性。计算检查字符的方法是将所有数据字符的值相加,然后除以103,取余数作为检查字符的值。 3. **生成条形码图案**:为每个字符生成...

    EF code first 可运行增删改查demo

    在本示例中,“EF code first 可运行增删改查demo”是一个完整的、可以直接运行的示例项目,旨在演示如何使用EF Code First实现对数据库的创建、读取、更新和删除(CRUD)操作。让我们深入了解一下这个技术及其关键...

    Java code Java code

    每个.java文件代表一个单独的Java源代码文件,其中可能包含一个或多个类定义。 Java编程语言的关键特性包括: 1. **封装**:通过类和对象的概念,实现数据隐藏和保护,使得代码更安全。 2. **继承**:允许子类继承...

    CODE128,CODE39生成打印代码

    在提供的文件列表中,我们可以看到一些源代码文件(如barcode.cpp、Code128.cpp、Code39.cpp)和项目文件(如barcode.dsp、barcode.dsw),这表明作者可能正在开发一个条形码生成器应用程序。`barcode.exe`可能是这...

    生成条形码并打印(code128ABC)

    在MFC中,我们可以通过继承CDialog类来创建一个对话框应用程序,用于显示和操作条形码生成的相关设置。 首先,你需要在项目中包含必要的库来处理条形码生成。这可能包括第三方库如Zint或ZXing,或者使用Windows GDI...

    小程序通过Code换取OpenId(后台为Java)

    微信小程序的用户信息获取需要请求微信的服务器,通过小程序提供的API在小程序端...小程序端比较简单,从教程的API部分把代码拷贝到小程序里就好了,这里将提供一个javaweb服务器端换取session_key和openid的代码示例

    codeFormatter和codeTemplates模板

    例如,你可以设置一个模板,当输入"fori"后自动补全一个for循环,或者输入"sysout"后自动插入System.out.println()语句。codeTemplates不仅可以应用于源代码,还可以用于注释,如创建类、方法或变量时自动生成注释...

    CodeWarrior入门及使用教程

    在CodeWarrior中,一个项目代表一个独立的可执行程序或库。用户可以通过"File" > "New" > "Project"来创建新项目,选择相应的处理器类型和模板。在项目管理中,可以添加源文件、头文件,设置编译选项,以及管理库...

    CodeMap V3.52及license

    CodeMap V3.52是该工具的一个更新版本,旨在提高性能、稳定性和新功能。 描述中提到的问题可能是由于旧的license过期或者不再适用于最新版V3.52导致的。开发者通常需要合法的license才能继续使用软件的新版本。幸运...

    VB6生成Code128Auto

    代码是一个类文件下载后添加到VB6工程中可以直接调用。 需自己定义: DCPrint As PictureBox '临时打印显示区 可生成的条码类型: 'Code128A = 0 'Code128B = 1 'Code128C = 2 'EAN128 = 3 'Code128Auto = 4

    再上传一个c++b版的CODE128

    标题中的“再上传一个c++b版的CODE128”指的是这个压缩包包含的是一个用C++编写的,针对CODE128条形码编码的库,而且这次的版本是针对Borland C++ Builder (简称cb)的。与之前上传的Visual C++ (vc)版本不同,这个...

Global site tag (gtag.js) - Google Analytics