我发现了很多与此相关的问题,但我没有找到解决我问题的简单方法.

我找不到一种方法来使我的JTable排序正确的Double值.

我扩展AbstractTableModel以接收一个Class数组并返回每列的正确类型:

class TableModelMod extends AbstractTableModel{

    private ArrayList data;
    private String [] headers;
    private Class [] types;

    TableModelMod(String [] heads,ArrayList datas,Class [] classes){
        headers = heads;
        data = datas;
        types = classes;
    }
    ... 
    @Override public Class getColumnClass(int c){
        if (c > types.length - 1)
            return null;
        else 
            return types[c];
    }
...

然后在我的自定义JTable构造函数中:

tablerowsorter<TableModelMod> sorter = new tablerowsorter<TableModelMod>((TableModelMod)getModel());

但是在添加行时我遇到了这个错误:

java.lang.IllegalArgumentException: Cannot format given Object as a Number

它在方法DecimalFormat.format(Object number,StringBuffer toAppendTo,FieldPosition pos)中失败,它接受大多数数字类型但是Double.

如果我为Double列使用另一个类,我没有错误,但仍然排序不能按预期工作.我试过不同的数字类,但似乎没有正确排序双打:

@Override public Class getColumnClass(int c){
    if (c > types.length - 1)
        return null;
    else if (types[c] == Double.class)
        return Number.class;
    else 
        return types[c];
}

我不确定我需要的是实现自定义RowSorter,自定义CellRenderer还是两者.

有人可以指导我如何解决这个更简单的方法吗?

非常感谢和最诚挚的问候.

编辑:已解决

告诉问题在哪里是非常尴尬的.

包含Object []行的ArrayList是使用getString(int)而不是getobject(int)或getDouble(int)从数据库ResultSet填充的,因此渲染器不能将该值用作Double.奇怪的是,它没有使用Integer或Number作为列类提供异常,但它仍然被排序为String.我在错误的类中寻找问题,因为我确信我的ArrayList只包含Objects.

非常感谢你的例子,看着他们我注意到我的双打实际上是字符串然后我可以找到转换发生的地方.

解决方法

看看这段代码.它对双重值进行排序.
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.tablerowsorter;

public class RowSorterDemo {
  public static void main(String args[]) {
    JFrame frame = new JFrame("Sort Table Demo");
    frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    Object rows[][] = { { "J",23.1 },{ "R",21.1,},{ "E",21.2,{ "B",27.1,{ "A",25.2,{ "S",22.9,};

    String columns[] = { "Name","Age" };

    TableModel model = new DefaultTableModel(rows,columns) {
      public Class getColumnClass(int column) {
        Class returnValue;
        if ((column >= 0) && (column < getColumnCount())) {
          returnValue = getValueAt(0,column).getClass();
        } else {
          returnValue = Object.class;
        }
        return returnValue;
      }
    };

    JTable table = new JTable(model);

    RowSorter<TableModel> sorter = new tablerowsorter<TableModel>(model);

    table.setRowSorter(sorter);

    JScrollPane pane = new JScrollPane(table);

    frame.add(pane,BorderLayout.CENTER);

    frame.setSize(300,150);
    frame.setVisible(true);
  }
}

我稍微修改了这个link给出的源,因此它需要双倍的值.

java – 在JTable中对double值进行排序的更多相关文章

  1. 使用Android中的Google Maps API从用户位置获取附近地点的结果

    location=-33.8670,151.1957&radius=500&types=food&name=cruise&key=API_KEY和响应JSON像这样:以下示例返回英国伦敦附近的医院列表.有关详细信息,请参阅here.

  2. Android:SQLite一对多设计

    任何人都有很好的建议,如何使用ContentProvider实现sqlite的一对多映射?如果你看UriContentProvider#insert,你可以看到它有ContentValues参数包含要插入的数据.问题是在当前的实现中,ContentValues不支持put方法,而class是final,所以我无法扩展它.为什么是一个问题?

  3. 有没有一种方法可以根据特定元素的财产更改列表中特定元素的数据类型?

    假设我有一个浮点数列表1,其中粗体为整数:现在,我想创建另一个仅包含整数的列表2,其中只有整数从列表1浮起:到目前为止,我已经尝试过这样的方法:然而,代码仍然将整数浮点数读取为浮点数而不是整数。有没有一种方法可以选择性地将整数浮点转换为列表中的整数?

  4. 类型和智能感知,可由typescript和其他使用JSDoc的linter解析

    如何让ESLint或Typescripttypes被JSDocstyle评论看到?

  5. 更改对graphQL查询的响应

    我有一个返回如下对象的查询:其中一些字段将包含非字母数字字符,我希望从响应中去掉这些字符但这行不通。如何在使用数据之前修复数据?我不控制后端,也不控制数据如何进入后端。

  6. php – 使用谷歌反向地理编码获取街道,城市和国家

    latlng=52.154184,6.199592&sensor=true它不起作用,因为在json数组中有更多的数据,并且使省份成为该国.如何选择我需要的类型?>forstreet:long_name其中“types”:[“route”]>forcity:long_namewhere“types”:[“locality”,“political”]>国家:long_name哪里“types”:[“国家”,“政治”]地理编码JSON的输出示例:我想我自己修改了,特此我的代码:您可以将数据转换为关联数组,并使

  7. php – Mongo Map首先减少

    首先Map/减少用户在这里,并使用MongoDB.我有很多页面访问数据,我想通过使用Map/Reduce有一些感觉.下面基本上是我想做的,但作为一个初学者的地图/减少,我认为这是我的知识!所以让我们在PHP中实现这一点:注意,我还没有测试过这个.这正是我根据我对你的架构的理解而得出的,从我对Mongo及其Map-Reduce实现的理解…

  8. 使用angularJS中的多个复选框进行过滤

    p=preview简单的方法我会为两个复选框设置不同的模型,并添加过滤器,如:演示Plunker自定义过滤器##我们可以将复选框绑定到一个对象,如:并在创建自定义过滤器之后:所以我们的HTML现在看起来很简单演示2Plunker[编辑@Mike]如果您有兴趣反转复选框过滤器,只需添加指令:播下新的HTML表格:演示3Plunker

  9. 在angular 2打字稿中导入gapi.auth2

    或者也许我使用gapi的方式是完全错误的?要将gapi和gapi.auth与Angular2一起使用,请使用NPM安装类型脚本定义.这将在node_modules文件夹中安装两个软件包@types/gapi和@types/gapi.auth2,并将配置保存在package.json中.检查node_modules文件夹以检查它们是否正确安装.如果您的Angular2应用程序名为main-app,您应该看到:编辑tsconfig.json以包含新的gapi和gapi.auth2类型:此时我强烈建议您抓咖啡阅

  10. Ubuntu使用VNC连接windows错误: connection: no matahcing security types

    在windows下打开VNCServer的设置选项,选择“专家”,然后在右边的设置项中找到SecurityTypes,手动把类型改成RFB

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部