我修复了使用 jide SortableTable的项目。如果表只包含英文数据,那么排序就可以了。如果数据采用混合的西欧语言,则排序失败。
如果我使用具有强度“SECONDARY”的Collator对数据集合进行排序,它工作正常。
问题是:如何使 SortableTable 使用 SECONDARY 整理器强度或自定义比较器对数据进行排序?
我修复了使用 jide SortableTable的项目。如果表只包含英文数据,那么排序就可以了。如果数据采用混合的西欧语言,则排序失败。
如果我使用具有强度“SECONDARY”的Collator对数据集合进行排序,它工作正常。
问题是:如何使 SortableTable 使用 SECONDARY 整理器强度或自定义比较器对数据进行排序?
JIDE 的 SortableTableModel 使用 ObjectComparatorManager 来获取比较器。您可以注册您的 Collator(默认情况下,我们使用 PRIMARY collator)
Collator collator = Collator.getInstance(); collator.setStrength(Collator.SECONDARY);
ObjectComparatorManager.registerComparator(String.class, collator , new ComparatorContext("CollatorSecondary")); // "CollatorSecondary" 可以是您的应用程序中唯一的任何字符串
然后在您的 SortableTableModel 子类中,您通过覆盖列的 getColumnComparatorContext(int column) 返回 new ComparatorContext("CollatorSecondary")。
如果您只想在一个表中使用此行为,另一种快速方法是覆盖 SortableTableModel 的 getComparator(int column)。
最后但同样重要的是,您可能还需要调用 SortableTableModel 的 setAlwaysUseComparators(true),因为出于性能考虑,我们使用单元格值的 compareTo 方法(如果可用)而不使用比较器。
继承和多态呢?您可以从SortableTable子类化一个新类并添加自定义行为。并在需要 SortableTable 的地方使用它的实例。