2017-02-22 5 views
1

Как настроить конвертер для TableCell, чтобы иметь возможность редактировать свойство Double?JavaFX редактируемый TableCell for Double свойство

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

И где найти документацию о том, как установить такие вещи с помощью FXML? Пока это выглядит довольно запутанным.

ответ

2

Невозможно сделать это в 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())); 
} 
+0

Спасибо. Я мог бы поклясться, что видел это где-то, но, возможно, просто сделал это ... У меня есть еще один крошечный вопрос: как я могу сделать определенную ячейку всегда в состоянии редактирования? –

Смежные вопросы