我想了解这些方法cellValueFactory();
和cellFactory();
何时调用?
他们的目的是什么?
他们是如何运作的?
答案 0 :(得分:9)
两个工厂都由TableView
使用(或更准确地说是Skin
)。
当TableCell
确定需要单元格显示数据时,使用 cellFactory
创建TableView
ui元素。单元格中显示的数据(= item
)可能会更改(滚动,修改TableView
项目)。 item
中显示的TableCell
由TableView
使用 cellValueFactory
确定。 TableView
确定需要在给定单元格中显示哪些项目,并使用cellValueFactory
获取包含该实例的ObservableValue
。
cellFactory
可用于自定义表格中单元格的外观,但通常不需要这样做,因为默认cellFactory
只使用toString
方法&# 39;要显示String
的项目。
cellValueFactory
用于"选择" TableView
项目的某一部分,应显示在给定列中。
在此示例中,您还可以看到修改TableView
项属性的情况。
commit.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Person p = tableView.getSelectionModel().getSelectedItem();
p.setName(name.getText());
Double value = sizeFormatter.getValue();
p.setSize(value == null ? -1d : value);
}
});
点击Button
时会发生以下情况:
TableView
添加到ObservableValue
返回的cellValueFactory
的侦听器。TableView
更新包含已修改项目的行中TableCell
的项目;使用新值调用updateItem
方法。在这种情况下,会使用默认工厂,因此updateItem
只需将item.toString()
设置为新文本。