我正在使用ETable在标准 JTable 上添加一点功能。
我面临的问题是单击列标题时如何正确对表格进行排序。目前,我有一个日期字段,以原始( double )格式显示修改儒略日期 (MJD)。在内部,它是一个 MJD 对象(看起来像一个日期字符串)。当表排序时,列会以默认方式(字典排序)进行处理,从而生成一个类似 1.0, 10.0, 100.0, 101.0, ...
的列表。如果我显示 MJD 对象而不是 double 形式,则它会正确排序;但是,我需要将其显示为 double 。 如何强制根据显示内容进行比较和排序?
请注意,我已经查看了此处发布的几个类似问题,例如 Java JTable Sorting Doesn't Work for Just One Column 。这种类型的解决方案对我不起作用,因为我不能简单地返回该列的 double 类,因为它在内部是不同的对象类型。
最佳答案
如 JTable
tutorial 中所示,您可以在表格或特定列上设置 TableRowSorter
。 DefaultRowSorter#setComparator
在您的情况下很有趣:您可以为所有列重复使用默认行排序器,只需为该特定列指定一个自定义Comparator
。
当然,如果表模型中的对象已经实现了Comparable
,则无需设置自己的Comparator
。只需确保 TableModel#getColumnClass
返回正确的类即可。
关于java - 如何按显示值而不是内部值对表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30983074/