Добавить собственный алгоритм сортировки в TableColumn - PullRequest
0 голосов
/ 06 марта 2020

вот моя проблема:

Установить собственный алгоритм сортировки для сортировки по умолчанию TableColumn.

Фон : как В столбце примера я хочу использовать столбец, который представляет адреса IPv4 как String. Таким образом, сортировка по умолчанию - лексикография c (1.1.1.1, 1.1.1.10, 1.1.1.2). Но мне бы хотелось иметь числовую сортировку (1.1.1.1, 1.1.1.2, 1.1.1.10).

Алгоритм сортировки не является проблемой. Я могу запустить эту сортировку с помощью Button, и отображение в TableView будет правильным. Но я хочу щелкнуть заголовок столбца и вызвать алгоритм сортировки.

Общие условия : данные в таблице представлены в виде ObservableList, заключенном в SortedList.

На данный момент у меня возникает вопрос: как я могу это понять?

1 Ответ

1 голос
/ 07 марта 2020

Вам нужно связать свои компараторы. Когда вы щелкаете заголовок столбца, будет использоваться компаратор столбца. Если вы щелкнете снова, будет использован обратный порядок этого компаратора. Если вы используете SortedList, и у вас есть разные компараторы для каждого столбца, привяжите свойство компаратора списка к свойству компаратора таблицы. Таким образом, когда вы нажимаете на заголовок, ваш список также будет уведомлен, и ваши данные будут обновлены:

columnA.setComparator(comparator1);
columnB.setComparator(comparator2);
columnC.setComparator(comparator3);

ObservableList<MyData> items = FXCollections.observableArrayList();
SortedList<MyData> sortedList = new SortedList<>(items);
sortedList.comparatorProperty().bind(tableView.comparatorProperty());

tableView.setItems(sortedList);
...