如何在 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. TextFieldTableCell
s。如果 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?>
我按照 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. TextFieldTableCell
s。如果 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?>