Обновление представления родительской таблицы из дочернего fxml

Сценарий: у меня есть родительское окно с именем EditClientDeatils.fxml и TableView в нем. Я редактирую результат этой строки, создавая другое окно с именем UserDetails.fxml и заполняя данные строки в эти поля FXML, теперь после редактирования из моего второго окна. Если я сохраню, мне нужно обновить родительскую таблицу последними данными. Я попробовал что-то вроде ниже и вообще не обновляет таблицу. Но когда я отлаживал, мой список таблиц обновлялся последними данными и не отображался в окне. Итак, как я могу обновить представление таблицы с другого контроллера?

В дочернем окне я загружаю родителя следующим образом.

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("EditClientDetails.fxml"));
                EditClientDetailsController fooController = (EditClientDetailsController) fxmlLoader.getController();
                try {
                    fxmlLoader.load();
                } catch (IOException ex) {
                    Logger.getLogger(NewUserController.class.getName()).log(Level.SEVERE, null, ex);
                }

И в моем родительском классе метод инициализации имеет следующий код:

@Override public void initialize (URL-адрес, ResourceBundle rb) {

    fNameCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("clientFirstName"));
    lNameCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("clientLastName"));
    addressCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("clientAddress"));
    mobileCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("clientMobileNumber"));
    emailCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("clientEmailID"));
    catagoryCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("clientTypeCode"));
    genderCol.setCellValueFactory(
            new PropertyValueFactory<AtUser, String>("gender"));

    editSaveAction.setSortable(false);

    editSaveAction.setCellValueFactory(
            new Callback<TableColumn.CellDataFeatures<AtUser, Boolean>, 
            ObservableValue<Boolean>>() {

        @Override
        public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<AtUser, Boolean> p) {
            return new SimpleBooleanProperty(p.getValue() != null);
        }
    });

     editSaveAction.setCellFactory(
            new Callback<TableColumn<AtUser, Boolean>, TableCell<AtUser, Boolean>>() {

        @Override
        public TableCell<AtUser, Boolean> call(TableColumn<AtUser, Boolean> p) {
            return new ClientButtonCell(customerTable);
        }

    });
    // Add filtered data to the table

    customerTable.setItems(filteredData);

    // Listen for text changes in the filter text field
    filterField.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable,
                String oldValue, String newValue) {

            updateFilteredData();
        }
    });

}  

Когда я отлаживаю

customerTable.setItems(filteredData);

этот filteredData содержит мои необходимые данные, но не входит в окно. пожалуйста, укажите, если я что-то пропустил.


person Firu    schedule 27.09.2013    source источник
comment
то есть не освежает?   -  person Magcus    schedule 27.09.2013
comment
Да.. не освежает   -  person Firu    schedule 27.09.2013


Ответы (1)


У меня была такая же проблема, и я нашел эту работу вокруг нее, чтобы заставить ее обновиться.

table.getColumns().get(0).setVisible(false);
table.getColumns().get(0).setVisible(true);

После изменения списка элементов таблицы.

person Magcus    schedule 27.09.2013
comment
Вы можете опубликовать свой код, чтобы я мог взглянуть на него? Все, что я имею в виду - person Magcus; 27.09.2013