用于 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()));
}
如何为 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()));
}