[英]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
TableRowSorter
使用Comparator
进行比较。 下面定义了如何为列选择Comparator
器:
- 如果通过
setComparator
方法为该列指定了Comparator
,请使用它。- 如果
getColumnClass
返回的列类为String
,请使用Collator.getInstance()
返回的Comparator
。- 如果列类实现
Comparable
,则使用一个Comparator来调用compareTo
方法。- 如果指定了
TableStringConverter
,则使用它将值转换为String
,然后使用Collator.getInstance()
返回的Comparator
。- 否则,在对对象调用
toString
的结果上使用Collator.getInstance()
返回的Comparator
。
第三和第五条规则是导致问题的原因:您将返回Number.class ,它没有实现Comparable。 因此,您的表使用第五条规则进行排序:您的值被视为字符串。
而不是返回Number.class,您需要返回实际上实现Comparable的内容,例如Integer.class,Double.class或BigDecimal.class。 每个类的javadoc都会告诉您它实现了什么接口。
或者,您可以在表列上安装自定义比较器,但是比较器将必须执行强制转换值并可能转换它们的工作。 返回一个Comparable类要容易得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.