【发布时间】:2015-06-23 01:28:03
【问题描述】:
我使用ETable 在标准 JTable 上添加了一些功能。
我面临的问题是在单击列标题时正确排序表格。目前,我有一个日期字段以原始(双精度)格式显示修改后的儒略日期(MJD)。在内部,它是一个 MJD 对象(看起来像一个日期字符串)。对表进行排序时,以默认方式(字典排序)处理该列,从而产生一个类似1.0, 10.0, 100.0, 101.0, ... 的列表。如果我显示 MJD 对象而不是 double 形式,则它是正确排序的;但是,我需要将其显示为双精度。 如何强制根据显示的内容进行比较和排序?
请注意,我已经查看了此处发布的几个类似问题,例如 Java JTable Sorting Doesn't Work for Just One Column。这种类型的解决方案对我不起作用,因为我不能简单地为该列返回一个双类,因为它在内部是不同的对象类型。
【问题讨论】:
-
这些结构中的大多数应该允许您提供自己的
Comparator,因此您可以定义自己如何比较这些字符串,即将它们转换为双精度然后再转换等。 -
@Thomas 我对 java 还很陌生,我已经看到了
Comparator的例子,但我不确定把它放在哪里? MJD 类已经覆盖了compareTo,以便我们可以比较实际的 MJD 对象。 -
那么在这种情况下,您的列数据类型应该是
MJD。 AFAIK 该表使用RowSorter(通过table.setRowSorter(...)设置),默认为TableRowSorter的实例,它应该在分类实现Comparable上正确工作。除此之外,您还可以尝试获取RowSorter并致电setComparator(index, comparator)。
标签: java swing jtable tablerowsorter