如何正确使用PropertyValueFactory?

我正在尝试使用TableView创建一个表,并根据User对象列表以编程方式填充它。 User有三个变量, nameProperty (String), rankProperty (Enum称为Rank)和netMeritsProperty (int)。 这些都存储在SimpleStringProperty对象中。 我的问题是数据不会出现在实际的表中,如下所示:

这是我的表格代码。 我不明白的是什么?

 TableColumn name = new TableColumn("Name"); name.setCellValueFactory(new PropertyValueFactory("nameProperty")); TableColumn rank = new TableColumn("Rank"); rank.setCellValueFactory(new PropertyValueFactory("rankProperty")); TableColumn netMerits = new TableColumn("Net Merits"); netMerits.setCellValueFactory(new PropertyValueFactory("netMeritsProperty")); userTable.getColumns().addAll(name, rank, netMerits); 

答案是关注,您作为PropertyValueFactory参数提供的字符串内容,以及在封装数据类型中实现的方法。

实例化:

 new PropertyValueFactory("name") 

将查找:

 User.nameProperty() 

使用PropertyValueFactory很简单,但它并非万无一失。

使用PropertyValueFactory最麻烦的一点可能是你提供的参数必须符合STRICT约定的JavaFX Bean属性的名称:

  1. 您不得包含“财产”一词
  2. 匹配区分大小写,因此“FIRSTNAME”不会被识别为“firstName”

最好的方法是查看您的JavaFX Bean定义块,并找到您的Property行。 获取属性的名称,省略“属性”部分,并将其完全复制(在相同的情况下)到传递给PropertyValueFactory的字符串。

例如,假设你有这个JavaFX Bean定义:

 public final String getFirstName() { return this.m_firstname.get(); } public final void setFirstName(String v) { this.m_firstname.set(v); } public final StringProperty firstNameProperty() { return m_firstname; } 

查看最后一行中属性的名称“firstNameProperty”。 省略“Property”,结果字符串是必须使用-exactly-作为PropertyValueFactory的String参数,例如。 “名字”。

 tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName"));