JTable 问题中的排序数字

Sorting Number in a JTable issue

如何实现对包含的列进行排序。 我设置的Cloumnclass是Number.Class

public Class<?> getColumnClass(int columnIndex) {
return Number.class;
}

并创建 TableRowSorter

TableRowSorter sorter= new TableRowSorter<TableModel>(table_mode);
        table.setRowSorter(sorter);

结果 8, 80, 9, 989 而不是 989 , 80, 9, 8

来自documentation of TableRowSorter

TableRowSorter uses Comparators for doing comparisons. The following defines how a Comparator is chosen for a column:

  1. If a Comparator has been specified for the column by the setComparator method, use it.
  2. If the column class as returned by getColumnClass is String, use the Comparator returned by Collator.getInstance().
  3. If the column class implements Comparable, use a Comparator that invokes the compareTo method.
  4. If a TableStringConverter has been specified, use it to convert the values to Strings and then use the Comparator returned by Collator.getInstance().
  5. Otherwise use the Comparator returned by Collator.getInstance() on the results from calling toString on the objects.

第三条和第五条规则是导致问题的原因:您正在 returning Number.class,它没有实现 Comparable。因此,您的 table 正在使用第五条规则进行排序:您的值被视为字符串。

而不是 returning Number.class,您需要 return 实际实现 Comparable 的东西,例如 Integer.class、Double.class 或 BigDecimal.class。每个 class 的 javadoc 会告诉你它实现了哪些接口。

或者,您可以在 table 列上安装一个自定义比较器,但您的比较器必须执行转换值并可能转换它们的工作。返回 Comparable class 更容易。