【问题标题】:Sort JTable column of longs对长的 JTable 列进行排序
【发布时间】:2011-03-31 01:27:53
【问题描述】:

我正在尝试对 JTable 中的列进行排序。该列包含实现 Comparable 的 Long (java.util.Long)。因此,阅读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。

我的代码没有创建一个自定义的 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 吗?谢谢!

【问题讨论】:

    标签: java sorting jtable long-integer comparator


    【解决方案1】:

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

    【讨论】:

    • 啊,它返回“Object”,而不是 Long。我在哪里设置/更改它?
    • 这是一个使用DefaultTableModelexample,和使用AbstractTableModelanother
    • 优秀;仔细看,第二个example 也是implements Comparable,以便按Value 排序。
    猜你喜欢
    • 2021-01-10
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多