JavaFX 尝试启用 MVC 模式。应该使用属性创建模型以利用绑定。在您的情况下,模型是 Person 类,因此您可以简单地添加 StringProperty firstName。但在 JavaFX 中,您必须注意其他命名约定,如 Pojo Bean 中的简单 getter 和 setter。
JavaFX 中Properties 的命名约定是:
public class Person {
private StringProperty firstName;
public void setFirstName(String value) { firstNameProperty().set(value); }
public String getFirstName() { return firstNameProperty().get(); }
public StringProperty firstNameProperty() {
if (firstName == null) firstName = new SimpleStringProperty(this, "firstName");
return firstName;
}
private StringProperty lastName;
public void setLastName(String value) { lastNameProperty().set(value); }
public String getLastName() { return lastNameProperty().get(); }
public StringProperty lastNameProperty() {
if (lastName == null) lastName = new SimpleStringProperty(this, "lastName");
return lastName;
}
}
之后,您可以将例如 TableView 的 TableColumn 绑定到属性“lastName”
TableView<Person> table = new TableView<Person>();
ObservableList<Person> teamMembers = getTeamMembers();
table.setItems(teamMembers);
TableColumn<Person,String> lastNameCol = new TableColumn<Person,String>("Last Name");
lastNameCol.setCellValueFactory(new PropertyValueFactory("lastName"));
如果没有属性,这将需要更多代码,并且您将无法获得实现 ChangeListener/InvalidationListener 支持的优势。
上面的例子来自JavaFXTableView
因此,为 JavaFX 制作模型的推荐方法是使用 JavaFX-Properties,而不是内置类型。