【问题标题】:Javafx TableView cell/model change/updated eventJavafx TableView 单元格/模型更改/更新事件
【发布时间】:2018-10-24 18:30:03
【问题描述】:

我有一个 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


    【解决方案1】:

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

    这是因为您在单击按钮后更新行后没有刷新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_Dthis post中的回答

    【讨论】:

    • TableView.refresh() 确实对我有用.. 我也想过,但刷新似乎是无法识别的方法..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多