从模型中自动更新 TableView 中的行

Posted

技术标签:

【中文标题】从模型中自动更新 TableView 中的行【英文标题】:Autoupdating rows in TableView from model 【发布时间】:2012-06-10 09:05:27 【问题描述】:

我一直在寻找有关将数据刷新到表格视图中的信息。我试图直接修改模型,但我得到了一个错误。我修改了模型,但是表格没有刷新,只有当我移动一列时,表格才会显示修改后的值。

举个例子(13-6)我拿教程:

http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJABIEED

我对其进行了修改,包括一个按钮及其操作:

Button button = new Button("Modify");
button.setOnAction(new EventHandler<ActionEvent>() 
@Override
public void handle(ActionEvent arg0) 
    String name = table.getItems().get(0).getFirstName();
    name = name + "aaaa";
    table.getItems().get(0).setFirstName(name);
    
);

final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.getChildren().addAll(label, table, button);
vbox.setPadding(new Insets(10, 0, 0, 10));

我猜这是tableview中的一个错误,但是有没有机会解决这个问题?

谢谢!

【问题讨论】:

【参考方案1】:

要使 TableView 能够跟踪数据更改,您需要将相关字段公开为 JavaFX 属性。将下一个方法添加到教程中的Person 类:

    public SimpleStringProperty firstNameProperty() 
        return firstName;
    

    public SimpleStringProperty lastNameProperty() 
        return lastName;
    

    public SimpleStringProperty emailProperty() 
        return email;
    

【讨论】:

它很简单。这正是我一直在寻找的。谢谢! 太棒了!我想它适用于反射,因此属性获取器具有正确的名称 [attribute]Property() 很重要。就我而言,我有 get[attribute]Property() 所以它没有更新。谢谢!【参考方案2】:

TableView 更新中有一个错误 (https://javafx-jira.kenai.com/browse/RT-22463)。我有类似的问题,经过一番搜索,这是我的解决方法。我发现如果列被删除然后重新添加,表格就会更新。

public static <T,U> void refreshTableView(TableView<T> tableView, List<TableColumn<T,U>> columns, List<T> rows)         
    tableView.getColumns().clear();
    tableView.getColumns().addAll(columns);

    ObservableList<T> list = FXCollections.observableArrayList(rows);
    tableView.setItems(list);

用法示例:

refreshTableView(myTableView, Arrays.asList(col1, col2, col3), rows);

【讨论】:

以上是关于从模型中自动更新 TableView 中的行的主要内容,如果未能解决你的问题,请参考以下文章

从 tableview 中删除一行

部分中的行计数未在 TableView 中更新

Binded DataGridView仅更新当前选定的行

使用从popover pickerview中选择的字符串数组自动刷新tableview

tableView 编辑委托方法不起作用(无效更新:第 0 节中的行数无效)

删除 TableView 中的行后如何更新 indexPath?