排序长的JTable列

时间:2011-03-31 01:27:53

标签: java sorting jtable long-integer comparator

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

1:如果已通过setComparator方法为列指定了比较器,请使用它。

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

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

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

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

我的代码不会创建自定义Comparator对象,因此#1已经出局。该列是Long的列,所以#2出来了。 #3表示它应该按Long“compareTo”方法排序。但事实并非如此。如果我的JTable有3个Longs,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吗?谢谢!

1 个答案:

答案 0 :(得分:1)

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