JavaFX 可编辑 TableCell for Double 属性

标签 java tableview javafx-8 tablecell tablecolumn

如何为 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/

相关文章:

java - ListView 分隔符未分隔项目

java - 将 java.util.Properties 转换为 HashMap<String,String>

java - 用随机数填充矩阵,垂直或水平不重复

swift - ScrollView 中的 TableView 中的按钮未触发

ios快速更改结果数组的类型

JavaFX WebView URL.createObjectURL 未定义

java - 将自定义类型的 FXML 属性设置为自定义 javafx 组件的属性

java - 装饰一个继承 protected 可观察对象的类

java - 生成线程利用率摘要

ios - 从所选单元格的照片库中获取图像问题?