我试图让表一的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);
答案是约注意力,你给作为参数,该参数字符串内容PropertyValueFactory
,和方法的封装数据类型实现。
实例:
new PropertyValueFactory<User, String>("name")
将查找为:
User.nameProperty()
使用PropertyValueFactory是简单的,但它不是万无一失。
大概是最麻烦的事情用PropertyValueFactory是您提供的参数必须按照严格的约定你的JavaFX Bean属性的名称相匹配:
- 你必须不包括“财产”一词
- 匹配是大小写敏感的,所以“名字”将不被认定为“名字”
最好的办法是看你的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"));