拦截对 JavaFX 8 TableView 的项目进行排序
Intercept sorting the items of a JavaFX 8 TableView
我有一个托管 TableView
的应用程序。每当用户通过单击特定列的 header 对行进行排序时,我需要
- 保存当前的物品顺序,
- 进行实际排序,
- 保存新的项目顺序。
我发现了这一点:
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");
}
}
}
});
希望对您有所帮助。
我有一个托管 TableView
的应用程序。每当用户通过单击特定列的 header 对行进行排序时,我需要
- 保存当前的物品顺序,
- 进行实际排序,
- 保存新的项目顺序。
我发现了这一点:
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");
}
}
}
});
希望对您有所帮助。