JavaFX - 编辑表视图不会更新模型属性



我使用下面的代码创建了一个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方法不会被调用。是不是应该是这样,或者我的理解是错误的?提前谢谢。

您从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)");
}
};

this.firstName.addListener((o, oldValue, newValue) -> System.out.println("first name updated (SimpleStringProperty.set)"));

最新更新