如何正确使用PropertyValueFactory?(How to use the Propert

2019-09-02 00:08发布

我试图让表一的TableView和编程填充它基于列表上User对象。 该User有三个变量, nameProperty (字符串), rankProperty (枚举称为等级),并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);

Answer 1:

答案是约注意力,你给作为参数,该参数字符串内容PropertyValueFactory ,和方法的封装数据类型实现。

实例:

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

将查找为:

User.nameProperty()


Answer 2:

使用PropertyValueFactory是简单的,但它不是万无一失。

大概是最麻烦的事情用PropertyValueFactory是您提供的参数必须按照严格的约定你的JavaFX Bean属性的名称相匹配:

  1. 你必须不包括“财产”一词
  2. 匹配是大小写敏感的,所以“名字”将不被认定为“名字”

最好的办法是看你的JavaFX Bean定义的块,并找到你的财产线。 就拿属性的名称,省略为“财产”的一部分,并复制它到底(在相同的情况下),以您传递给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”的属性的名称。 省略“属性”,并将得到的字符串是你必须使用什么-exactly-作为字符串参数PropertyValueFactory,例如。 “名字”。

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


文章来源: How to use the PropertyValueFactory correctly?