如何让单元格将值存储回源对象?

时间:2014-06-10 09:31:53

标签: java javafx javafx-8

我正在修补TableView以找出处理它的好方法。现在我正在使用PropertyValueFactory来填充表格,将TextFieldTableCell.forTableColumn()用作CellFactory。

我的问题:我可以编辑单元格,但更改不会存储在任何地方。即使只是对表进行排序也会将值还原。如何让它将值重新放入例如ModelStringProperty在模型类中?如果它避免了大量的样板代码,则可以获得奖励。

1 个答案:

答案 0 :(得分:0)

只要您的模型对象正确公开属性,它就可以正常工作。即你应该有一个结构为

的模型类
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

public class Person {
    private final StringProperty firstName = new SimpleStringProperty(this, "firstName");
    public final String getFirstName() {
        return firstName.get();
    }
    public final void setFirstName(String firstName) {
        this.firstName.set(firstName);
    }
    public StringProperty firstNameProperty() {
        return firstName ;
    }

    private final StringProperty lastName = new SimpleStringProperty(this, "lastName");
    public final String getLastName() {
        return lastName.get();
    }
    public final void setLastName(String lastName) {
        this.lastName.set(lastName);
    }
    public StringProperty lastNameProperty() {
        return lastName ;
    }

    public Person(String firstName, String lastName) {
        this.setFirstName(firstName);
        this.setLastName(lastName);
    }
}

然后你就可以了

TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
// In Java 8, I prefer:
// firstNameCol.setCellValueFactory(data -> data.getValue().firstNameProperty());
firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());