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

Lep*_*aun 5 javafx tableview fxml

我按照这个Oracle教程在FXML中创建了一个TableView.但是,没有关于如何使单元格可编辑的信息.我已经尝试过其他教程,建议firstNameCol.setOnEditCommit( new EventHandler ...在控制器代码中添加类似的东西,但它不起作用.无论我如何单击鼠标或敲击键盘,表格单元格都不会变为"可编辑的文本框",如下所示:

在此输入图像描述

这是我对表的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>
        ...
Run Code Online (Sandbox Code Playgroud)

自动完成允许我onEditCommit=""在FXML中设置TableColumn,但我不知道该放什么.

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

fab*_*ian 7

您需要使用cellFactory创建可编辑单元格,例如TextFieldTableCells.如果PropertyValueFactory返回可写属性,onEditCommit则不一定必要

<TableColumn editable="true" prefWidth="150.0" sortable="false" text="Step">
    <cellValueFactory>
        <PropertyValueFactory property="stepName" />
    </cellValueFactory>
    <cellFactory>
        <TextFieldTableCell fx:factory="forTableColumn" />
    </cellFactory>
</TableColumn>
Run Code Online (Sandbox Code Playgroud)

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

<?import javafx.scene.control.cell.TextFieldTableCell?>
Run Code Online (Sandbox Code Playgroud)