2016-08-12 26 views
2

我跟着this Oracle tutorial在FXML中創建一個TableView。但是沒有關於如何使單元格可編輯的信息。我嘗試了其他教程,建議在控制器代碼中添加諸如firstNameCol.setOnEditCommit(new EventHandler ...之類的東西,但它不起作用。不管我怎麼點擊鼠標或衝鍵盤,表格單元格不會更改爲「可編輯文本框」,如在這裏:如何在FXML中定義可編輯的TableCell?

enter image description here

下面是表的我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以允許對單元格進行編輯?

回答

2

您需要使用創建可編輯單元格的cellFactoryTextFieldTableCells。如果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?> 
+0

這是否應該足以改變模型對象中的值(通過SimpleStringProperties)?或者我錯過了什麼? – Leprechaun

+0

@Leprechaun只要有一個屬性getter返回屬性(例如'StringProperty stepNameProperty()'),它應該工作,請參閱http://stackoverflow.com/documentation/javafx/2229/tableview/7289/propertyvaluefactory#t = 201608121148083945414 – fabian

相關問題