来自日食帮助:
setCellValueFactory
需要将单元格值工厂设置为指定如何填充单个TableColumn 中的所有单元格。单元格值工厂是一个回调,它提供 CellDataFeatures 实例,并期望返回一个ObservableValue。将在内部观察返回的ObservableValue实例,以允许立即更新值以反映在屏幕上。
<小时/> CellDataFeatures
TableColumn中使用的支持类作为的包装类,为特定的Cell提供所有必要的信息。
<小时/> 的 PropertyValueFactory
创建一个默认的PropertyValueFactory,以从给定的TableView行项中提取值,反过来,使用给定的属性名称。
<小时/> 用我的话解释:
myTableViewColumn.setCellValueFactory(new PropertyValueFactory<MyModelClass, String>("name"));
setCellValueFactory 指定如何填充 myTableViewColumn 列中的所有单元格。此处使用的数据类型是属性。通过使用PropertyValueFactory,我们通过查找名为“name”的属性(在MyModelClass private final SimpleStringProperty name = new SimpleStringProperty("");
中声明)来获取指定的属性。
我是否了解setCellValueFactory
和PropertyValueFactory
的使用情况?
答案 0 :(得分:1)
是的,这是正确的。还要注意,表格的数据需要设置如下:
ObservableList<MyModelClass> tableData= FXCollections.observableArrayList();
table.setItems(tableData);
基本上,此表有一个MyModelClass对象列表。调用单元工厂将所需的字段从对象绑定到给定列中的单元格。
setCellValueFactory也可以与lambda而不是PropertyValueFactory一起使用,如下所示。
myTableViewColumn.setCellValueFactory(cellData -> cellData.getValue().name);
两者都做同样的事情,将对象列表中名称字段的值绑定到该列。
答案 1 :(得分:1)
我不知道你是否理解它是如何使用的;描述似乎大多是正确的,但有一些细节你没有得到正确的答案:
Callback
本身不提供值。 cellValueFactory
是一个Callback
,它将CellDataFeatures
个实例作为其方法的参数并返回ObservableValue
;存储在ObservableValue
实例中的值用作item
的{{1}}
此外,该值仅传递给负责显示值的TableCell
。这个单元格对新值的作用完全取决于它的实现者。屏幕上可能会显示更改,也可能不会显示更改,并且更改值时不需要在屏幕上显示单元格(可以使用TableCell
滚动条将其滚动到视图之外)。
TableView
不会查找该字段。它会查找用于检索PropertyValueFactory
的{{1}}方法
如果没有此类方法,则会查找getter方法:nameProperty()
或ObservableValue
。在后一种情况下,使用包装getter返回的值的getName()
实例(;请注意,这使得无法自动更新)。