1

我目前在我的 JTable 上使用以下方法来对列进行自动排序

table.setAutoCreateRowSorter(true);

这目前允许我单击每个标题,相应的列将对任何带有字母的内容进行排序。当它试图对我的具有整数的列进行排序时,它搞砸了。它似乎是一次对每个数字进行排序,而不是按实际数字排序。例如,它会说 8 大于 100,因为 8 大于 1。有什么方法可以覆盖这种行为吗?

4

2 回答 2

8

当它试图对我的具有整数的列进行排序时,它搞砸了

可能是因为:

  1. 您将数字存储为字符串,或者
  2. 您将数据存储为 Integer 对象,但您没有覆盖getColumnClass() TableModel 的方法以返回Integer.class该列。只有当您的列类正确时,才会使用正确的比较器。

有关更多信息以及如何覆盖 getColumnClass() 方法的示例,请参阅 Swing 教程中关于概念的部分:渲染器和编辑器。

于 2013-11-07T20:51:37.653 回答
0

您可能需要使用特定比较器设置行排序器:

Comparator<Integer> comparator;
TableRowSorter sorter;
table.setRowSorter(sorter);
sorter.setModel(table.getModel());
sorter.setComparator(comparator);

在这里可以找到更多关于比较器及其可能存在的问题。但是,@camickr 也是正确的,如果列类设置正确,通常不需要 Integer。

于 2013-11-07T20:52:48.117 回答