Привязать TableView к ObservableList - PullRequest
0 голосов
/ 10 июля 2019

У меня есть наблюдаемый список сохранения объектов Автор.GUI может добавить автора в мою базу данных.Наблюдаемый список содержит все объекты базы данных.Я хочу, чтобы моя таблица обновлялась автоматически, если я добавляю автора в базу данных.

Я уже пытался обновить список с помощью table.refresh ().Я также думаю об использовании прослушивателя изменений для наблюдаемого списка.

Вот код для создания таблицы.authorList - наблюдаемый список.Я думаю, что я не совсем понимаю, как использовать наблюдаемый список.Мое предложение заключалось в том, что при использовании «table.setItem (authorList)» моя таблица автоматически обновляет свои записи, если что-то изменяется в списке.Очевидно, это не тот случай.

    private void createAuthorsTablePane() {

        // TODO: Layout ändern

        GridPane authorGridPane = new GridPane();

        // create table
        TableView<Author> table = new TableView<>();

        // Create columns with title
        TableColumn<Author, String> idColumn = new TableColumn<>("ID");
        TableColumn<Author, String> nameColumn = new TableColumn<>("Name");
        TableColumn<Author, String> emailColumn = new TableColumn<>("Email");
        TableColumn<Author, String> publicationsColumn = new TableColumn<>("Publications");

        // Add columns to table node
        table.getColumns().add(idColumn);
        table.getColumns().add(nameColumn);
        table.getColumns().add(emailColumn);
        table.getColumns().add(publicationsColumn);

        // Bindings
        PropertyValueFactory<Author, String> idColumnFactory = new PropertyValueFactory<>("id");
        PropertyValueFactory<Author, String> nameColumnFactory = new PropertyValueFactory<>("name");
        PropertyValueFactory<Author, String> emailColumnFactory = new PropertyValueFactory<>("email");
        PropertyValueFactory<Author, String> publicationsColumnFactory = new PropertyValueFactory<>("publications");

        idColumn.setCellValueFactory(idColumnFactory);
        nameColumn.setCellValueFactory(nameColumnFactory);
        emailColumn.setCellValueFactory(emailColumnFactory);
        publicationsColumn.setCellValueFactory(publicationsColumnFactory);

        table.setItems(authorList);

        // Create Buttons
        createAuthorButton = new Button("Create author");

        createAuthorButton.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {
                mainController.createAuthorController();

            }
        });

        deleteAuthorButton = new Button("Delete selected author");

        // Add Nodes to Pane
        authorGridPane.add(new Label("Authors"), 0, 0);
        authorGridPane.add(table, 0, 1);
        authorGridPane.add(deleteAuthorButton, 0, 2);
        authorGridPane.add(createAuthorButton, 1, 2);

        authorPane = authorGridPane;

    }

Вот класс, в котором я создаю свой authorList.Я регистрирую список в классе, где я создаю таблицу с помощью контроллера.

public class ObservableModel {
    private ObservableList<Publication> publicationList;
    private ObservableList<Author> authorList;

    public ObservableModel(DatabaseService database) {
        publicationList = FXCollections.observableList(database.getPublications());
        authorList = FXCollections.observableList(database.getAuthors());

    }

    public ObservableList<Publication> getPublicationList() {
        return publicationList;
    }

    public ObservableList<Author> getAuthorList() {
        return authorList;
    }

}

Ответы [ 2 ]

1 голос
/ 10 июля 2019
TableView<Author> table = new TableView<>();
private ObservableList<Author> authorList = FXCollections.observableArrayList();
private Property<ObservableList<Author>> authorListProperty = new SimpleObjectProperty<>(authorList);

table.itemsProperty().bind(authorListProperty); // The Binding

Каждый раз, когда вы меняете authorList, таблица будет также обновляться

0 голосов
/ 10 июля 2019
 idcolumnFactory.setCellValueFactory(cellData -> cellData.getValue().getIdProperty());

или если вы объявляете простой бин

 idcolumnFactory.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().getId()));

не забудьте

  table.setItems(your_observale_list);
...