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

8 javafx

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

什么时候调用?

他们的目的是什么?

它们如何工作?

fab*_*ian 10

两个工厂都被TableView(或更确切地说是Skin)使用.

TableCellUI元素使用所创建的cellFactory,当TableView确定它需要一个电池,以显示它的数据.item单元格中显示的数据(= )可能会发生变化(滚动,修改TableView项目).在item所显示的TableCell是由确定的TableView使用cellValueFactory.该TableView显示在一个给定的电池它的项目这就需要会决定将cellValueFactory得到一个ObservableValue包含了实例.

cellFactory可用于定制细胞的表的外观,但通常这是没有必要的,因为默认cellFactory简单地使用toString它的项目的方法来得到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);
    }

});
Run Code Online (Sandbox Code Playgroud)

Button单击时会发生以下情况:

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