何时对字符串使用StringProperty?
我正在用JavaFX开发一个应用程序,我想在一个何时对字符串使用StringProperty?,string,binding,javafx,String,Binding,Javafx,我正在用JavaFX开发一个应用程序,我想在一个Person类中表示一个人的信息。我遇到了一个教程,其中一个人的名字被表示为StringProperty,而不是String。我已经寻找了它们之间的差异,并找到了答案,但是那里的解释不足以让我理解这个概念。网上的一些帖子说使用StringProperty比String有很多优点,但没有提及 现在我的问题是:在什么条件下需要使用StringProperty而不是String,这样做的好处是什么 为什么会这样: StringProperty first
Person
类中表示一个人的信息。我遇到了一个教程,其中一个人的名字被表示为StringProperty
,而不是String
。我已经寻找了它们之间的差异,并找到了答案,但是那里的解释不足以让我理解这个概念。网上的一些帖子说使用StringProperty
比String
有很多优点,但没有提及
现在我的问题是:在什么条件下需要使用StringProperty
而不是String
,这样做的好处是什么
为什么会这样:
StringProperty firstName代码>
在这方面:
stringfirstname代码>JavaFX尝试启用MVC模式。应使用属性创建模型,以利用绑定。在您的例子中,模型是Person类,因此您可以简单地添加StringProperty名字。但是在JavaFX中,您必须注意其他命名约定,如POJObean中的简单getter和setter
JavaFX中的命名约定为:
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 table=newtableview();
ObservableList teamMembers=getTeamMembers();
表2.setItems(团队成员);
TableColumn lastNameCol=新的TableColumn(“姓氏”);
lastNameCol.setCellValueFactory(新属性ValueFactory(“lastName”));
如果没有属性,这将是更多的代码,并且您将没有实现支持的优势
上面的例子来自JavaFX
因此,为JavaFX创建模型的推荐方法是使用JavaFX属性,而不是内置类型
何时使用StringProperty firstName而不是String firstName
当其他人将观察到此firstName
变量时,请使用它。您还可以通过附加一个侦听器来观察它。您可以在与JavaFX的其他可观察对象绑定时使用此变量。在某些情况下,必须使用JavaFX属性,例如使用可编辑的tableView呈现的人员列表。为了在编辑的单元格中立即反映更改,底层绑定字段应该是一个属性。因此,这似乎为JavaBeans提供了一些扩展?是的,这正是它的实现方式。见
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"));