JavaFX-编辑TableView不';t更新模型属性

JavaFX-编辑TableView不';t更新模型属性,java,javafx,Java,Javafx,我已经使用下面的代码创建了一个TableView TableView<Person> tableView = new TableView<>(); TableColumn<Person,String> firstNameCol = new TableColumn<>("First Name"); firstNameCol .setCellValueFactory(cellData -> cellData.getValue().firstNam

我已经使用下面的代码创建了一个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()));

现在,当我编辑firstname列时,我应该得到“firstname updated”输出,但我没有,这意味着不会调用模型属性的set方法。是不是应该这样,还是我的理解错了?提前感谢。

您可以从
cellValueFactory
返回属性。假设未为列指定
onEditCommit
事件处理程序,则会修改
SimpleStringProperty
对象。不涉及包含该字段的类的setter方法

您应该能够通过向构造函数中的属性添加侦听器或扩展
SimpleStringProperty
来验证这一点:

this.firstName = new SimpleStringProperty(firstName) {

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

};


cellValueFactory
返回属性。假设未为列指定
onEditCommit
事件处理程序,则会修改
SimpleStringProperty
对象。不涉及包含该字段的类的setter方法

您应该能够通过向构造函数中的属性添加侦听器或扩展
SimpleStringProperty
来验证这一点:

this.firstName = new SimpleStringProperty(firstName) {

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

};


@MS90这只是本专栏的标题。绑定发生在此行:
firstNameCol.setCellValueFactory(cellData->cellData.getValue().firstNameProperty())如何将那里的属性设置为新的PropertyValueFactory(“firstName”)?相同的结果,不会调用set方法。@MS90这只是列的标题。绑定发生在此行:
firstNameCol.setCellValueFactory(cellData->cellData.getValue().firstNameProperty())如何将那个里的属性设置为新的PropertyValueFactory(“firstName”)?同样的结果,set方法不会被调用。
this.firstName.addListener((o, oldValue, newValue) -> System.out.println("first name updated (SimpleStringProperty.set)"));