2017-02-22 50 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中没有办法做到这一点。

您提供给TableColumncellFactory是一个工厂:其类型为Callback<TableColumn<?,?>,TableCell<?,?>>。通过调用返回到静态工厂方法TextFieldTableCell.forTableColumn()的对象(FXMLLoader根据元素<TextFieldTableCell fx:factory="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())); 
} 
+0

谢谢。我可以发誓我在某个地方看到它,但可能只是做了它......我还有一个小问题:我如何让特定单元格始终处于编辑状态? –