#javafx-8 #icu
#javafx-8 #icu
Вопрос:
Я хотел использовать правила сортировки ICU для сортировки (строковых) данных в a TableColumn
в a TableView
с использованием JavaFX и не смог найти пример в Интернете. Вот что сработало для меня. (Я предполагаю, что читатель уже знает, как получить данные в TableView
, поскольку это не то, что находится в фокусе.)
Ответ №1:
Сначала мы импортируем ICU RuleBasedCollator на основе правил:
import com.ibm.icu.text.RuleBasedCollator;
Во-вторых, предположим, у нас есть класс Person со строковыми полями имени и фамилии. TableView имеет два табличных столбца, один для первого имени и один для второго имени:
TableView<Person> personTable;
TableColumn<Person, String> firstNameColumn;
TableColumn<Person, String> lastNameColumn;
В-третьих, в методе initialize() контроллера представления добавьте что-то вроде следующего:
String newRules = "amp; S < C amp; 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. В реальном случае могут быть гораздо более сложные правила.)
Мы создаем ICU, RuleBasedCollator
используя правила ICU, а затем создаем Comparator
, используя эти правила.
Наконец, мы настроили компаратор полей столбца на использование этого компаратора.