java - 对长整型的 JTable 列进行排序

标签 java sorting jtable long-integer comparator

我正在尝试对 JTable 中的列进行排序。该列包含 Long (j ava.util.Long ),它实现了 Comparable。因此,阅读this document ,它说:

1:如果setComparator方法已经为该列指定了Comparator,则使用它。

2:如果getColumnClass返回的列类是String,则使用Collat​​or.getInstance()返回的Comparator。

3:如果列类实现了 Comparable,请使用调用compareTo 方法的Comparator。

4:如果指定了TableStringConverter,则使用它将值转换为字符串,然后使用Collat​​or.getInstance()返回的Comparator。

5:否则,对对象调用 toString 的结果使用 Collat​​or.getInstance() 返回的比较器。

我的代码没有创建自定义 Comparator 对象,因此 #1 已退出。该专栏是 Long 的专栏,因此#2 已出局。 #3 指出它应该按 Long“compareTo”方法排序。但事实并非如此。如果我的 JTable 有 3 个 Long,90,900 和 111,它会对它们进行排序,“900,90,111”或“111,90,900”。它似乎像字符串一样对它们进行排序,如#5 中所述。

这是我们创建的表:

table = new JTable( new CustomTableModel( new Vector<Vector<Object>>() ,Record.getNames() ) );
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setAutoCreateRowSorter(true);

然后添加信息:

public void setRecords( Iterable<Record> records ){
    CustomTableModel model = (CustomTableModel) table.getModel();
    model.setRowCount(0);
    model.clearRecords();

    for( Record r : records ){
        Vector<Object> v = new Vector<Object>();
        v.add(r.getFromNumber());
        v.add(r.getToNumber());
        v.add(r.getStartDate());
        v.add(new Long( r.getDuration() ) );
        model.addRow(v);
        model.addRecord(r);
    }
    model.fireTableDataChanged();
    table.getRowSorter().toggleSortOrder(2);

如何修复它,使最后一列(第 3 列)按 Long/long/int 排序,而不是按字符串排序?我研究了自定义比较器,但我不确定如何实现。 JTable 不应该使用#3 吗?谢谢!

最佳答案

验证模型的 getColumnClass() 方法是否返回 Long.class

关于java - 对长整型的 JTable 列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494371/

相关文章:

java - 用于验证来自 Google 的 oauth2 token 的 Spring Boot 应用程序

java - 如何在 IntelliJ-IDEA 中按字母顺序在运行前按字母顺序排列预写的 String[] 数组元素?

swing - 添加 TableRowSorter 添加值到模型后导致 java.lang.IndexOutOfBoundsException : Invalid range

java - 仅将 JButton 添加到 JTable 中的某些行和列

java - 针对 Hyper-V VM 中运行的 SQL Server 诊断缓慢的 JDBC 选择语句

java - Spring 启动: Create EAR from springboot multi-module project

java - 列出 Hibernate 配置参数

从最小或最大堆中删除根元素的算法

按 LISP 中的索引号从最大值到最小值对列表进行排序?

Java - 要在 Jtable 中显示的 Arraylist 内容