gpt4 book ai didi

JavaFX - 编辑 TableView 不会更新模型属性

转载 作者:行者123 更新时间:2023-12-02 01:45:28 27 4
gpt4 key购买 nike

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

关于JavaFX - 编辑 TableView 不会更新模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744980/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com