JavaFX - Редактирование TableView не обновляет свойство модели - PullRequest
0 голосов
/ 12 декабря 2018

Я создал TableView, используя приведенный ниже код;

TableView<Person> tableView = new TableView<>();
TableColumn<Person,String> firstNameCol = new TableColumn<>("First Name");
firstNameCol .setCellValueFactory(cellData -> cellData.getValue().firstNameProperty());
tableView.getColumns().add(firstNameCol);
tableView.getItems().add(new Person("John"));
firstNameCol.setCellFactory(TextFieldTableCell.<Person>forTableColumn()));

, и моя модель выглядит следующим образом:

class Person{

   private SimpleStringProperty firstName;

   public Person(String firstName){
        this.firstName = new SimpleStringProperty(firstName);
   }

   public final void setFirstName(String value){
         firstName.set(value);
         System.out.println("first name updated");
   }

   public final String getFirstName(){
        return firstName.get();
   }

   public SimpleStringProperty firstNameProperty(){
        return firstName;
   }
}

Теперь, когда я редактирую столбец Имя, я долженполучить вывод «имя обновлено», но это не так, что означает, что метод set свойства модели не вызывается.Разве это не так, или мое понимание неверно?Заранее спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

Вы возвращаете недвижимость с cellValueFactory.Если вы не укажете обработчик события onEditCommit для столбца, объект SimpleStringProperty будет изменен.Метод установки класса, содержащего поле, не задействован.

Вы можете проверить это, добавив прослушиватель к свойству в конструкторе или расширив SimpleStringProperty:

this.firstName = new SimpleStringProperty(firstName) {

    @Override
    public void set(String value) {
        super.set(value);
        System.out.println("first name updated (SimpleStringProperty.set)");
    }

};

или

this.firstName.addListener((o, oldValue, newValue) -> System.out.println("first name updated (SimpleStringProperty.set)"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...