代码之家  ›  专栏  ›  技术社区  ›  arxakoulini

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

  •  0
  • arxakoulini  · 技术社区  · 5 年前

    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;
       }
    }
    

    现在,当我编辑firstname列时,我应该得到“firstname updated”输出,但我没有,这意味着不会调用模型属性的set方法。是不是应该这样,还是我的理解错了?提前谢谢。

    1 回复  |  直到 5 年前
        1
  •  2
  •   fabian    5 年前

    您可以从 cellValueFactory . 假设您没有指定 onEditCommit 列的事件处理程序 SimpleStringProperty 对象被修改。不涉及包含该字段的类的setter方法。

    :

    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)"));