Автообновление строк в TableView из модели

Я искал информацию об обновлении данных в табличном представлении. Я пытался модифицировать модель напрямую, но получаю ошибку. Я изменяю модель, но таблица не обновляется, только когда я перемещаю столбец, в таблице отображаются измененные значения.

Чтобы показать вам пример (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));

Я предполагаю, что это ошибка в табличном представлении, но есть ли шанс это исправить?

Спасибо!


person Antonio J.    schedule 06.06.2012    source источник


Ответы (2)


чтобы TableView мог отслеживать изменения данных, вам необходимо предоставить соответствующие поля как свойства JavaFX. Добавьте следующие методы в класс Person из учебника:

    public SimpleStringProperty firstNameProperty() {
        return firstName;
    }

    public SimpleStringProperty lastNameProperty() {
        return lastName;
    }

    public SimpleStringProperty emailProperty() {
        return email;
    }
person Sergey Grinev    schedule 06.06.2012
comment
Это просто работает. Это именно то, что я искал. Спасибо! - person Antonio J.; 06.06.2012
comment
Здорово! Я предполагаю, что это работает с отражением, поэтому важно, чтобы получатели свойств имели правильное имя [атрибут]Property(). В моем случае у меня было get[attribute]Property(), поэтому оно не обновлялось. Спасибо! - person Pek Ifly; 04.02.2016

В обновлении 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);
person ceklock    schedule 04.09.2013