我一直在查看有关将数据刷新到tableview的信息。我试图直接修改模型,但我得到了一个bug。我修改了模型,但表格没有刷新,只有当我移动一列时,表格才显示修改后的值。
为了向您展示一个示例(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));
我猜这是桌面视图中的一个错误,但有没有机会解决这个问题?
谢谢!
答案 0 :(得分:21)
使TableView能够跟踪将相关字段公开为JavaFX属性所需的数据更改。将以下方法添加到教程中的Person
类:
public SimpleStringProperty firstNameProperty() {
return firstName;
}
public SimpleStringProperty lastNameProperty() {
return lastName;
}
public SimpleStringProperty emailProperty() {
return email;
}
答案 1 :(得分:3)
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);