gpt4 book ai didi

java - JTable 问题中的数字排序

转载 作者:行者123 更新时间:2023-12-01 11:58:10 24 4
gpt4 key购买 nike

如何实现包含的列的排序。我设置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.

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

您需要返回实际实现 Comparable 的内容,而不是返回 Number.class,例如 Integer.class、Double.class 或 BigDecimal.class。每个类的javadoc都会告诉你它实现了哪些接口(interface)。

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

关于java - JTable 问题中的数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28263273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com