首页 > 解决方案 > Javafx TableView 单元格/模型更改/更新事件

问题描述

我有一个 javafx TableView 显示从服务器抓取的数据并放入模型中。模型数据将每隔几秒更新一次,可能会添加新行或修改特定模型数据。

假设我有一个名为“优先级”的列,用户单击优先级标题以根据优先级对表进行排序以查看 LOW MEDIUM HIGH 优先级。添加新行时,将根据排序正确插入行。

这里的问题是,当一个现有行的数据被修改时,例如,我使用一个按钮来改变第一行的优先级。

btn.setOnAction(new EventHandler<ActionEvent>(){
  @Override
  Public void handle(ActionEvent event){
    data.get(0).setPriority("HIGH");
  }
});

该表没有立即反映更改,也没有排序。当我双击要编辑的单元格或使用表格时,我只能看到修改后的优先级。

所以这是我的问题:

  1. 为什么我的表在数据更改后没有立即反映更改?PS:我确实使用

    table.setItems(数据);

  2. 有没有办法在数据被修改时通知我,因为如果是这样,我可能能够触发我的表的某种刷新以反映这些更改。但如果我不知道,我不能这样做当数据被修改

标签: tableview

解决方案


该表没有立即反映更改,也没有排序。当我双击要编辑的单元格或使用表格时,我只能看到修改后的优先级。

这是因为您没有tableview在单击按钮时刷新更新后的行。您还必须设置排序顺序tableview

 btn.setOnAction(new EventHandler<ActionEvent>(){

     @Override
     Public void handle(ActionEvent event){
        data.get(0).setPriority("HIGH");

        priorityColumn.setSortType(TableColumn.SortType.ASCENDING);
        tableview.refresh();
        tableview.getSortOrder().clear();
        tableview.getSortOrder().addAll(priorityColumn);
     }
});

有没有办法在修改数据时通知我,因为如果是这样,我可能能够触发我的表的某种刷新以反映这些更改..但如果我不知道我不能这样做当数据被修改

为此,请参阅此帖子James_D中的答案


推荐阅读