cellValueFactory()和cellFactory()如何工作?它们之间有什么区别?

时间:2016-08-06 11:27:55

标签: javafx

我想了解这些方法cellValueFactory();cellFactory();

何时调用?

他们的目的是什么?

他们是如何运作的?

1 个答案:

答案 0 :(得分:9)

两个工厂都由TableView使用(或更准确地说是Skin)。

TableCell确定需要单元格显示数据时,使用 cellFactory 创建TableView ui元素。单元格中显示的数据(= item)可能会更改(滚动,修改TableView项目)。 item中显示的TableCellTableView使用 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时会发生以下情况:

  1. 修改属性,通知{1}} TableView添加到ObservableValue返回的cellValueFactory的侦听器。
  2. TableView更新包含已修改项目的行中TableCell的项目;使用新值调用updateItem方法。在这种情况下,会使用默认工厂,因此updateItem只需将item.toString()设置为新文本。