Автообновление строк в 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);
Другие вопросы по тегам