如何按显示值而不是内部值对表进行排序?

时间:2015-06-22 14:50:40

标签: java swing jtable tablerowsorter

我使用ETable来增加标准JTable的一些功能。

我遇到的问题是在单击列标题时正确排序表。目前,我有一个日期字段,以原始(双)格式显示修改的儒略日期(MJD)。在内部,它是一个MJD对象(看起来像一个日期字符串)。对表进行排序时,将以默认方式处理列(词典排序),从而生成类似1.0, 10.0, 100.0, 101.0, ...的列表。如果我显示MJD对象而不是双重形式,则它被正确排序;但是,我需要将其显示为双精度数。 如何根据显示的内容强制进行比较和排序?

请注意,我已经查看过此处发布的几个类似问题  Java JTable Sorting Doesn't Work for Just One Column。这种类型的解决方案对我来说不起作用,因为我不能简单地为列返回一个double类,因为它在内部是一个不同的对象类型。

1 个答案:

答案 0 :(得分:3)

JTable tutorial所示,您可以在表格或特定列上设置TableRowSorter。在您的情况下,DefaultRowSorter#setComparator很有意思:您可以为所有列重复使用默认行排序器,只需为该特定列指定自定义Comparator

当然,如果表模型中的对象已经实现Comparable,则无需设置自己的Comparator。只需确保TableModel#getColumnClass返回正确的类。