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 Comparator
s for doing comparisons. The following defines how a Comparator
is chosen for a column:
- If a
Comparator
has been specified for the column by the setComparator
method, use it.
- If the column class as returned by
getColumnClass
is String
, use the Comparator
returned by Collator.getInstance()
.
- If the column class implements
Comparable
, use a Comparator that invokes the compareTo
method.
- If a
TableStringConverter
has been specified, use it to convert the values to String
s and then use the Comparator
returned by Collator.getInstance()
.
- 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 更容易。
如何实现对包含的列进行排序。 我设置的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
usesComparator
s for doing comparisons. The following defines how aComparator
is chosen for a column:
- If a
Comparator
has been specified for the column by thesetComparator
method, use it.- If the column class as returned by
getColumnClass
isString
, use theComparator
returned byCollator.getInstance()
.- If the column class implements
Comparable
, use a Comparator that invokes thecompareTo
method.- If a
TableStringConverter
has been specified, use it to convert the values toString
s and then use theComparator
returned byCollator.getInstance()
.- Otherwise use the
Comparator
returned byCollator.getInstance()
on the results from callingtoString
on the objects.
第三条和第五条规则是导致问题的原因:您正在 returning Number.class,它没有实现 Comparable。因此,您的 table 正在使用第五条规则进行排序:您的值被视为字符串。
而不是 returning Number.class,您需要 return 实际实现 Comparable 的东西,例如 Integer.class、Double.class 或 BigDecimal.class。每个 class 的 javadoc 会告诉你它实现了哪些接口。
或者,您可以在 table 列上安装一个自定义比较器,但您的比较器必须执行转换值并可能转换它们的工作。返回 Comparable class 更容易。