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

时间:2016-08-12 11:21:02

标签: javafx tableview fxml

我跟着this Oracle tutorial在FXML中创建了一个TableView。但是,没有关于如何使单元格可编辑的信息。我尝试过其他教程,建议在控制器代码中添加yourbutton.imageView?.contentMode =.ScaleAspectFit yourbutton.contentHorizontalAlignment = .Fill yourbutton.contentVerticalAlignment = .Fill yourbutton.setImage(UIImage(named: stretchImage)!, forState: .Normal) 之类的东西,但它不起作用。无论我如何点击鼠标或敲击键盘,表格单元格都不会变成“可编辑的文本框”,如下所示:

enter image description here

这是我对表的FXML定义:

firstNameCol.setOnEditCommit( new EventHandler ...

自动完成功能允许我在FXML的TableColumn上设置<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以允许对单元格进行编辑?

1 个答案:

答案 0 :(得分:6)

您需要使用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>

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

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