用于 Double 属性 的 JavaFX 可编辑 TableCell

JavaFX editable TableCell for Double property

如何为 TableCell 设置转换器以能够编辑 Double 属性?

<TableColumn fx:id="priceCol" text="Price">
  <cellValueFactory>
    <PropertyValueFactory property="price" />
  </cellValueFactory>
  <cellFactory>
    <TextFieldTableCell fx:factory="forTableColumn">
      <converter>
      // ???
      </converter>
    </TextFieldTableCell>
  </cellFactory>
</TableColumn>

在哪里可以找到有关如何使用 FXML 设置此类内容的文档?到目前为止,这看起来真的很混乱。

据我所知,无法在 FXML 中执行此操作。

FXMLLoader根据元素<TextFieldTableCell fx:factory="forTableColumn">创建的cellFactory you are providing to the TableColumn is a factory: its type is Callback<TableColumn<?,?>,TableCell<?,?>>. The object returned by the call to the static factory method TextFieldTableCell.forTableColumn()就是这种类型。

您提供的 FXML 代码试图在 TextFieldTableCell.forTableColumn() 返回的对象上调用 setConverter(...),当然 Callback 没有定义 setConverter(...) 方法,所以没有无论您将什么作为 <converter> 的子标签包含在内,它都不会起作用。

据我所知,在 FXML 中没有办法为通过 fx:factory 调用的工厂方法提供参数(我想你是这么想的),所以我认为你必须这样做这在控制器中。

当然,后者很简单。就做

<TableColumn fx:id="priceCol" text="Price">
  <cellValueFactory>
    <PropertyValueFactory property="price" />
  </cellValueFactory>
</TableColumn>

在 FXML 中,并在您的控制器中执行

public void initialize() {
    priceCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
}