使用JTable的默认列分类器对整数进行排序?

时间:2013-11-07 20:47:00

标签: java swing numbers jtable rowsorter

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

table.setAutoCreateRowSorter(true);

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

2 个答案:

答案 0 :(得分:8)

  

当它试图对具有整数

的列进行排序时,它正在搞乱

可能是因为:

  1. 您将数字存储为字符串,或
  2. 您将数据存储为Integer对象,但未覆盖TableModel的getColumnClass()方法以返回该列的Integer.class。只有在列类正确时才会使用正确的比较器。
  3. 有关更多信息,请参阅Concepts: Renderers and Editors上的Swing教程中的部分以及如何覆盖getColumnClass()方法的示例。

答案 1 :(得分:0)

您可能需要使用特定的比较器设置行分类器:

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

Here可以更多地了解比较器及其可能存在的问题。但是,@ camickr也是正确的,如果列类设置正确,通常不需要Integer。