Невозможно сделать это в FXML, насколько я могу судить.
cellFactory
Вы предоставляете на TableColumn
завод: его тип Callback<TableColumn<?,?>,TableCell<?,?>>
. Объект, возвращенный вызовом статического заводского метода TextFieldTableCell.forTableColumn()
, который создает FXMLLoader
в соответствии с элементом <TextFieldTableCell fx:factory="forTableColumn">
, относится к этому типу.
FXML код при условии, пытается вызвать setConverter(...)
на объект, возвращаемый TextFieldTableCell.forTableColumn()
, и конечно 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()));
}
Спасибо. Я мог бы поклясться, что видел это где-то, но, возможно, просто сделал это ... У меня есть еще один крошечный вопрос: как я могу сделать определенную ячейку всегда в состоянии редактирования? –