繁体   English   中英

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

TableRowSorter文档中

TableRowSorter使用Comparator进行比较。 下面定义了如何为列选择Comparator器:

  1. 如果通过setComparator方法为该列指定了Comparator ,请使用它。
  2. 如果getColumnClass返回的列类为String ,请使用Collator.getInstance()返回的Comparator
  3. 如果列类实现Comparable ,则使用一个Comparator来调用compareTo方法。
  4. 如果指定了TableStringConverter ,则使用它将值转换为String ,然后使用Collator.getInstance()返回的Comparator
  5. 否则,在对对象调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM