[英]JavaFX - Editing TableView doesn't update model property
我已經使用下面的代碼創建了一個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)"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.