6

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

为了给你看一个例子(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));

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

谢谢!

4

2 回答 2

21

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

    public SimpleStringProperty firstNameProperty() {
        return firstName;
    }

    public SimpleStringProperty lastNameProperty() {
        return lastName;
    }

    public SimpleStringProperty emailProperty() {
        return email;
    }
于 2012-06-06T12:37:37.587 回答
3

There is a bug in TableView update (https://javafx-jira.kenai.com/browse/RT-22463). I had similar problem and after some search this is my workaround. I found that if the columns are removed and then re-added the table is updated.

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);
}


Example of usage:

refreshTableView(myTableView, Arrays.asList(col1, col2, col3), rows);
于 2013-09-04T00:23:42.417 回答