javafx TableView: почему слушатель sortOrder не срабатывает при сортировке по убыванию? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть javafx TableView, и я хочу знать, когда изменяется порядок сортировки столбца. Я добавил слушателя к методу getSortOrder. Однако он срабатывает только при сортировке по возрастанию и никогда при сортировке по убыванию . Чтобы проверить это, я использовал пример кода У кого-нибудь есть идея, почему это не срабатывает? Нужно ли еще что-то добавить?

Данные в таблице находятся в SortedList, и я добавил слушателя следующим образом:

personTable.getSortOrder().addListener(this::onColumnSortOrderChanged);

 private void onColumnSortOrderChanged(ListChangeListener.Change<? extends TableColumn<Person, ?>> change) {
    boolean changed = false;
    while (change.next()) {
        changed = true;
    }
    if (changed) {
        if (change.getList().isEmpty()) {
            System.out.println("observable is empty");
        } else {
            TableColumn<Person, ?> column = change.getList().get(0);
            System.out.println("Sorted: " + column.getText() + " sort type " + column.getSortType());
        }
    }
}

1 Ответ

0 голосов
/ 10 сентября 2018

Для сортировки можно использовать несколько столбцов (например, сначала сортировать людей по фамилии и использовать имя в качестве вторичного критерия). Вы можете удерживать Shift , чтобы добавить несколько столбцов. Этот список не изменяется, если вы изменяете порядок сортировки столбца по возрастанию и убыванию.

Чтобы прослушать и эти изменения, вам нужно прослушать свойство TableColumn.sortType.

// print sort order on change
table.getSortOrder().addListener((Observable o) -> {
    System.out.println("sort order: "+ table.getSortOrder().stream().map(TableColumn::getText).collect(Collectors.joining(", ", "{", "}")));
});

// print sortType on change
column.sortTypeProperty().addListener(o -> System.out.println("sortType changed to: " + column.getSortType()));
...