如何在 FXML 中定义可编辑的 TableCell?

How to define an editable TableCell in FXML?

我按照 this Oracle tutorial 在 FXML 中创建了一个 TableView。但是没有关于如何制作单元格 editable 的信息。我已经尝试过其他教程,建议在控制器代码中添加类似 firstNameCol.setOnEditCommit( new EventHandler ... 的内容,但它没有用。无论我如何单击鼠标或敲击键盘,table 单元格都不会变为 "editable textbox",如下所示:

这是我对 table:

的 FXML 定义
<TableView fx:id="tvAlgorithmSteps" editable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" VBox.vgrow="ALWAYS">
    <columns>
        <TableColumn editable="true" prefWidth="150.0" sortable="false" text="Step">
            <cellValueFactory>
                <PropertyValueFactory property="stepName" />
            </cellValueFactory>
        </TableColumn>
        ...

自动完成功能允许我在 FXML 的 TableColumn 上设置 onEditCommit="",但我不知道该放什么。

我应该如何编辑 FXML 以允许对单元格进行编辑?

您需要使用 cellFactory creating editable cells, e.g. TextFieldTableCells。如果 PropertyValueFactory returns 一个可写的 属性,onEditCommit 应该是不必要的

<TableColumn editable="true" prefWidth="150.0" sortable="false" text="Step">
    <cellValueFactory>
        <PropertyValueFactory property="stepName" />
    </cellValueFactory>
    <cellFactory>
        <TextFieldTableCell fx:factory="forTableColumn" />
    </cellFactory>
</TableColumn>

您可能需要添加处理指令以将 TextFieldTableCell class 导入文件的开头(但在 <?xml ... 之后):

<?import javafx.scene.control.cell.TextFieldTableCell?>