Iva*_*rov 2 java tableview tablecell tablecolumn javafx-8
如何为TableCell设置转换器以能够编辑Double属性?
<TableColumn fx:id="priceCol" text="Price">
<cellValueFactory>
<PropertyValueFactory property="price" />
</cellValueFactory>
<cellFactory>
<TextFieldTableCell fx:factory="forTableColumn">
<converter>
// ???
</converter>
</TextFieldTableCell>
</cellFactory>
</TableColumn>
Run Code Online (Sandbox Code Playgroud)
在哪里可以找到有关如何使用FXML设置此类文档的文档?到目前为止,这看起来确实令人困惑。
据我所知,在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>
Run Code Online (Sandbox Code Playgroud)
在FXML和您的控制器中
public void initialize() {
priceCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |