【发布时间】:2017-07-19 11:04:11
【问题描述】:
来自 eclipse 帮助:
setCellValueFactory
单元格值工厂需要设置为指定如何填充单个 TableColumn 中的所有单元格。单元格值工厂是一个回调,它提供一个 CellDataFeatures 实例,并期望返回一个 ObservableValue。返回的 ObservableValue 实例将在内部进行观察,以允许立即更新要反映在屏幕上的值。
CellDataFeatures
TableColumn 中用作包装类的支持类,用于为特定 Cell 提供所有必要信息。
PropertyValueFactory
创建一个默认的 PropertyValueFactory 以从给定的 TableView 行项目中提取值,使用给定的属性名称。
用我的话解释:
myTableViewColumn.setCellValueFactory(new PropertyValueFactory<MyModelClass, String>("name"));
setCellValueFactory 指定如何填充列myTableViewColumn 中的所有单元格。这里使用的数据类型是 property。通过使用 PropertyValueFactory,我们通过查找名为“name”的属性(在 MyModelClass private final SimpleStringProperty name = new SimpleStringProperty(""); 中声明)来获取指定的属性。
我了解setCellValueFactory 和PropertyValueFactory 的用法吗?
【问题讨论】:
-
传递给
PropertyValueFactory构造函数的值与具有该属性的变量的名称无关:它链接到用于访问该属性的方法名称和它的价值。请参阅documentation。 -
我没有得到你答案的第二部分,对不起。如果传递给构造函数的值与我的变量的名称无关,那么我希望我必须有一个名为 nameProperty 的方法,就像文档说的那样:在这个例子中,使用了“firstName”字符串作为对 Person 类类型中假定的 firstNameProperty() 方法的引用,但我没有。您能否尝试给我一个提示,说明您指向我的文档的哪个特殊部分?提前致谢。
-
这就是我的意思。如果变量的名称是
fname,但方法是firstNameProperty,则需要new PropertyValueFactory("firstName"),不是new PropertyValue("fname")。 -
FWIW 我强烈建议不要使用
PropertyValueFactory,而只是自己实现回调,就像@ievinm 的回答一样。 -
我坚持这样一个事实,即我没有像
firstNameProperty这样的方法。但是按照文档 如果不存在与此模式匹配的方法,则支持尝试调用 get() 或 is 我得到了这个。我的 getter 被称为 getFirstName,如果我重命名它们,那么我会得到预期的行为,即该列不显示任何值。谢谢楼主!()