【问题标题】:Why doesn't the sort on my TableView in JavaFX work为什么我在 JavaFX 中的 TableView 上的排序不起作用
【发布时间】:2020-06-16 15:16:50
【问题描述】:

伙计们,

我的程序有很多 TableViews。在除一种排序之外的所有表格中都有效。我在那个单一的 TableViews 中找不到我的错误。单击标题时,它似乎是排序但不刷新视图。如果我更改选项卡并返回,则 TableView 已排序。如果选择了一行并单击标题,则所选颜色会在正确的位置排序,但不会在表格数据上排序。

我有我的 ObservableList 和 TableView:

private ObservableList<ProjectViewModel>    projectViewModelList = null;

// some more TableColumns
@FXML
TableColumn<ProjectViewModel, String>       TableColumnToolchainStepphase;
@FXML
TableView<ProjectViewModel>                 TableViewToolchain;

我的初始化:

@FXML
public void initialize(){
    //...
    initializeLists();
    //...
    initTableViewToolchain();
    initTableColumns();
    //...
}

private void initializeLists(){
    projectViewModelList = FXCollections.observableArrayList();
}
private void initTableViewToolchain(){
    TableViewToolchain.setItems( projectViewModelList );
}
private void initTableColumns(){
    TableColumnToolchainStepphase
            .setCellValueFactory( new Callback<CellDataFeatures<ProjectViewModel, String>, ObservableValue<String>>() {

                @Override
                public ObservableValue<String> call( CellDataFeatures<ProjectViewModel, String> param ){
                    String string = param.getValue().getStepphaseString();
                    return new ReadOnlyStringWrapper( string );
                }
            } );

}

我的餐桌人数:

private void setProjectViewModelList( Collection<ProjectViewModel> projectViewModelCollection ){
    projectViewModelList.clear();
    projectViewModelList.setAll( projectViewModelCollection );
}

我哪里做错了?

【问题讨论】:

  • 也许这个 SO 问题(和答案)会有所帮助。 Sort TableView by certain column Javafx
  • 没用。我的 TableView 已预先排序。但是,当再次单击标题时,排序箭头会变为降序,但表格仍按升序排序。排序算法正在工作。但是 TableView 不会重新加载。更改选项卡给了我一个排序表。
  • 我有一个解决方法,但我的问题仍然有效,我想知道原因。 TableViewToolchain.setOnMouseClicked( ( MouseEvent event ) -&gt; { TableViewToolchain.sort(); TableViewToolchain.refresh(); } );
  • 查看您的代码,我看不出是什么导致您的TableView 以您描述的方式运行。为了帮助您,我想在我的机器上复制并运行您的代码。为了让我这样做,我请你edit你的问题并发布minimal reproducible example

标签: sorting tableview javafx-8


【解决方案1】:

我做了一个解决方法,我在鼠标点击时强制排序和刷新:

TableViewToolchain.setOnMouseClicked( ( MouseEvent event ) ->{
   TableViewToolchain.sort();
   TableViewToolchain.refresh();
} );

因此,当单击这些列时,排序会按预期进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2014-10-19
    • 2017-09-28
    • 2017-09-14
    • 2012-08-08
    相关资源
    最近更新 更多