如何按显示值而不是内部值对 table 进行排序?
How can I sort a table by displayed value rather than internal value?
我正在使用 ETable 在标准 JTable 的基础上增加一些功能。
我面临的问题是在单击 headers 列时正确排序 table。目前,我有一个日期字段以原始(双精度)格式显示修改后的儒略日期 (MJD)。在内部,它是一个 MJD object(看起来像一个日期字符串)。当对 table 进行排序时,该列以默认方式处理(字典排序),因此会生成类似于 1.0, 10.0, 100.0, 101.0, ...
的列表。如果我显示 MJD object 而不是 double 形式,则排序正确;但是,我需要将它显示为双精度。 如何强制根据显示的内容进行比较和排序?
请注意,我已经查看了此处发布的几个类似问题,例如
Java JTable Sorting Doesn't Work for Just One Column。这种类型的解决方案对我不起作用,因为我不能简单地 return 一个双 class 列,因为它在内部是不同的 object 类型。
如 JTable
tutorial 中所示,您可以在 table 或该特定列上设置 TableRowSorter
。 DefaultRowSorter#setComparator
在您的情况下很有趣:您可以为所有列重新使用默认行排序器,只需为该特定列指定自定义 Comparator
。
当然,如果您的table模型中的对象已经实现了Comparable
,则无需设置您自己的Comparator
。只需确保 TableModel#getColumnClass
returns 正确 class.
我正在使用 ETable 在标准 JTable 的基础上增加一些功能。
我面临的问题是在单击 headers 列时正确排序 table。目前,我有一个日期字段以原始(双精度)格式显示修改后的儒略日期 (MJD)。在内部,它是一个 MJD object(看起来像一个日期字符串)。当对 table 进行排序时,该列以默认方式处理(字典排序),因此会生成类似于 1.0, 10.0, 100.0, 101.0, ...
的列表。如果我显示 MJD object 而不是 double 形式,则排序正确;但是,我需要将它显示为双精度。 如何强制根据显示的内容进行比较和排序?
请注意,我已经查看了此处发布的几个类似问题,例如 Java JTable Sorting Doesn't Work for Just One Column。这种类型的解决方案对我不起作用,因为我不能简单地 return 一个双 class 列,因为它在内部是不同的 object 类型。
如 JTable
tutorial 中所示,您可以在 table 或该特定列上设置 TableRowSorter
。 DefaultRowSorter#setComparator
在您的情况下很有趣:您可以为所有列重新使用默认行排序器,只需为该特定列指定自定义 Comparator
。
当然,如果您的table模型中的对象已经实现了Comparable
,则无需设置您自己的Comparator
。只需确保 TableModel#getColumnClass
returns 正确 class.