簡體   English   中英

JavaFX-編輯TableView不會更新模型屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM