拦截对 JavaFX 8 TableView 的项目进行排序

Intercept sorting the items of a JavaFX 8 TableView

我有一个托管 TableView 的应用程序。每当用户通过单击特定列的 header 对行进行排序时,我需要

  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。有没有更好的方法来保存排序前后的项目排列?

您可以使用 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");
              }
           }
       }

});

希望对您有所帮助。