如何为 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 中无法做到这一点。
cellFactory
您正在提供给 TableColumn
是一个工厂:它的类型是Callback<TableColumn<?,?>,TableCell<?,?>>
.调用静态工厂方法返回的对象 TextFieldTableCell.forTableColumn()
,这就是 FXMLLoader
根据元素<TextFieldTableCell fx:factory="forTableColumn">
创建, 属于这种类型。
您提供的 FXML 代码尝试调用 setConverter(...)
在 TextFieldTableCell.forTableColumn()
返回的对象上,当然还有 Callback
没有定义 setConverter(...)
方法,因此无论您将什么作为 <converter>
的子标签包含在内这是行不通的。
据我所知,FXML 无法为通过 fx:factory
调用的工厂方法提供参数。 (这就是我认为您的意图),所以我认为您必须在 Controller 中执行此操作。
当然,后者很容易。就这样
<TableColumn fx:id="priceCol" text="Price">
<cellValueFactory>
<PropertyValueFactory property="price" />
</cellValueFactory>
</TableColumn>
在 FXML 中,并在您的 Controller 中执行
public void initialize() {
priceCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
}
关于JavaFX 可编辑 TableCell for Double 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381290/