我已使用以下代码创建了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方法。是不是应该这样,否则我的理解是错误的?预先感谢。
答案 0 :(得分:2)
您从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)"));