Автообновление строк в TableView из модели
Я искал информацию об обновлении данных в виде таблицы. Я пытался изменить модель напрямую, но я получаю ошибку. Я изменяю модель, но таблица не обновляется, только при перемещении столбца в таблице отображаются измененные значения.
Чтобы показать вам пример (13-6), я беру учебник:
http://docs.oracle.com/javafx/2/ui_controls/table-view.htm
И я изменяю его, включая кнопку и ее действие:
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));
Я думаю, что это ошибка в табличном представлении, но есть ли шанс это исправить?
Спасибо!
2 ответа
Чтобы TableView мог отслеживать изменения данных, вам необходимо предоставить соответствующие поля в качестве свойств JavaFX. Добавить следующие методы в Person
класс из учебника:
public SimpleStringProperty firstNameProperty() {
return firstName;
}
public SimpleStringProperty lastNameProperty() {
return lastName;
}
public SimpleStringProperty emailProperty() {
return email;
}
В обновлении 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);