10

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

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

TableColumn<User, String> name = new TableColumn<>("Name");
name.setCellValueFactory(new PropertyValueFactory<User, String>("nameProperty"));

TableColumn<User, String> rank = new TableColumn<>("Rank");
rank.setCellValueFactory(new PropertyValueFactory<User, String>("rankProperty"));

TableColumn<User, String> netMerits = new TableColumn<>("Net Merits");
netMerits.setCellValueFactory(new PropertyValueFactory<User, String>("netMeritsProperty"));

userTable.getColumns().addAll(name, rank, netMerits);
4

2 回答 2

19

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

实例化:

new PropertyValueFactory<User, String>("name")

将查找:

User.nameProperty()
于 2013-05-05T00:25:27.327 回答
16

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

使用 PropertyValueFactory 最麻烦的事情可能是您提供的参数必须根据 STRICT 约定与您的 JavaFX Bean 属性的名称匹配:

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

最好的方法是查看您的 JavaFX Bean 定义块,并找到您的 Property 行。取属性的名称,省略“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”,生成的字符串是您必须使用的 - 完全 - 作为 PropertyValueFactory 的字符串参数,例如。“名”。

tcolMyTableCol.setCellValueFactory(new PropertyValueFactory("firstName"));
于 2013-05-05T17:42:47.110 回答