Javafx TableView单元格/模型更改/更新事件

时间:2018-05-15 02:23:20

标签: tableview

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

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

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

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

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

所以这是我的问题:

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

    设置了表项

    table.setItems(数据);

  2. 有没有办法让我在修改数据时得到通知,因为如果是这样的话,我可能会触发某种类型的刷新来反映这些变化..但我做不到如果我不知道数据何时被修改

1 个答案:

答案 0 :(得分:0)

  

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

这是因为您在按钮点击更新行后没有刷新FILE_SKIP_EMPTY_LINES。您还必须为tableview

设置排序顺序
tableview
  

有没有办法让我在修改数据时收到通知,因为如果是这样的话,我可能会触发某种类型的刷新来反映这些变化......但如果我不这样做,我就不能这样做不知道数据何时被修改

为此请参阅this post

中的 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); } }); 回答