首页 > 解决方案 > 如何使用 ICU 排序规则对 JavaFX TableView 中的数据进行排序?

问题描述

我想使用 ICU 排序规则对使用 JavaFX 中的(字符串)数据进行排序,但TableColumnTableView网上找不到示例。这对我有用。(我假设读者已经知道如何获取数据,TableView因为这不是重点。)

标签: javafx-8icu

解决方案


首先,我们导入一个 ICU RuleBasedCollat​​or:

import com.ibm.icu.text.RuleBasedCollator;

其次,假设我们有一个 Person 类,其中包含名字和姓氏字符串字段。TableView 有两个 TableColumn,一个用于第一个名称,一个用于第二个名称:

TableView<Person> personTable;
TableColumn<Person, String> firstNameColumn;
TableColumn<Person, String> lastNameColumn;

第三,在视图控制器的 initialize() 方法中,添加如下内容:

String newRules = "& S < C & Mu < Mue";
RuleBasedCollator collatorViaRules = new RuleBasedCollator(newRules);
Comparator<String> comparatorViaRules = Comparator.comparing(String::toString, collatorViaRules);
firstNameColumn.setComparator((String s1, String s2) -> {
            return comparatorViaRules.compare(s1, s2);
});
lastNameColumn.setComparator((String s1, String s2) -> {
            return comparatorViaRules.compare(s1, s2);
});

中的两个 ICU 规则newRules将任何 C 放在 S 之后,并将 Mu... 放在 Mue 之前。(这些在这里并不是很有意义;它们是为了查看是否应用了 ICU 规则。真实案例可能有更复杂的规则。)我们RuleBasedCollator使用 ICU 规则创建一个 ICU,然后Comparator使用这些规则创建一个。最后,我们设置列字段的比较器来使用这个比较器。


推荐阅读