Перехват сортировки элементов JavaFX 8 TableView

У меня есть приложения, в которых размещен файл TableView. Всякий раз, когда пользователь сортирует строки, щелкая заголовок определенного столбца, мне нужно

  1. Сохраните текущий порядок элементов,
  2. Выполните фактическую сортировку,
  3. Сохраните новый порядок элементов.

Я смог заметить это:

this.tableView.sortPolicyProperty().set(t -> {
        System.out.println("saving source order");
        ... // Saving
        FXCollections.sort(tableView.getItems(), t.getComparator());
        System.out.println("saving target order");
        ... // Saving
        return true;
});

Однако это довольно часто выдает ClassCastException. Есть ли лучший способ сохранить перестановки элементов до и после сортировки?


person coderodde    schedule 01.04.2016    source источник


Ответы (1)


Вы можете послушать его, используя ListChangeListener лучший способ :)

tv.getItems().addListener(new ListChangeListener<T>(){
            @Override
            public void onChanged(javafx.collections.ListChangeListener.Change<
                                   ? extends T> c) {        
            while(c.next()){
              if(c.wasPermutated()){
                   System.out.println("is permuated");
              }
           }
       }

});

Надеюсь, поможет.

person Elltz    schedule 01.04.2016
comment
Так и было. Благодарю вас! :-) - person coderodde; 01.04.2016