什么时候使用 StringProperty 而不是 String?
When to use StringProperty over String?
我正在用 JavaFX 开发一个应用程序,我想在其中用单个 Person
class 表示一个人的信息。我遇到了一个教程,其中一个人的名字被表示为 StringProperty
而不是 String
。我搜索了它们的区别并找到了 and this 但是那里的解释不足以让我理解这个概念。网上有些 post 说 StringProperty
比 String
有优势,但没说。
现在我的问题是:在什么条件下需要使用 StringProperty
而不是 String
,这样做有什么好处?
为什么这样:
StringProperty firstName;
关于这个:
String firstName;
JavaFX 尝试启用 MVC 模式。应使用属性创建模型以利用绑定。在您的例子中,模型是人 class,因此您可以简单地添加 String属性 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 而不是内置类型。
When to use StringProperty firstName over String firstName?
当此 firstName
变量将被其他人观察时使用它。您也可以通过附加一个侦听器来观察它。您可以在与 JavaFX 的其他可观察对象的绑定中使用此变量。在某些情况下,必须使用 JavaFX 属性,例如使用可编辑的 tableView 呈现的 Person 列表。要立即在编辑的单元格中反映更改,基础绑定字段应为 属性.
我正在用 JavaFX 开发一个应用程序,我想在其中用单个 Person
class 表示一个人的信息。我遇到了一个教程,其中一个人的名字被表示为 StringProperty
而不是 String
。我搜索了它们的区别并找到了 StringProperty
比 String
有优势,但没说。
现在我的问题是:在什么条件下需要使用 StringProperty
而不是 String
,这样做有什么好处?
为什么这样:
StringProperty firstName;
关于这个:
String firstName;
JavaFX 尝试启用 MVC 模式。应使用属性创建模型以利用绑定。在您的例子中,模型是人 class,因此您可以简单地添加 String属性 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 而不是内置类型。
When to use StringProperty firstName over String firstName?
当此 firstName
变量将被其他人观察时使用它。您也可以通过附加一个侦听器来观察它。您可以在与 JavaFX 的其他可观察对象的绑定中使用此变量。在某些情况下,必须使用 JavaFX 属性,例如使用可编辑的 tableView 呈现的 Person 列表。要立即在编辑的单元格中反映更改,基础绑定字段应为 属性.