commitedit()是否会更改其对象的属性?

时间:2016-08-01 11:41:59

标签: java tableview javafx-8

我想知道JavaFX中TableCell的commitEdit()方法是否更新了该行所代表的对象的属性。

1 个答案:

答案 0 :(得分:0)

来自TableView documentation

  

默认情况下,TableColumn编辑提交处理程序为非null,带有   尝试覆盖的属性值的默认处理程序   当前正在编辑的行中的项目。它可以做到这一点   Cell.commitEdit(Object)方法在新值中传递,这是   通过CellEditEvent传递给编辑提交处理程序   被解雇。这只是一个呼唤的问题   TableColumn.CellEditEvent.getNewValue()要检索此值。

     

非常重要的是要注意,如果你打电话   TableColumn.setOnEditCommit(javafx.event.EventHandler)与您自己   EventHandler,然后您将删除默认处理程序。除非   然后处理对属性的回写(或相关数据)   来源),什么都不会发生。您可以使用以下方法解决此问题   TableColumnBase.addEventHandler(javafx.event.EventType, javafx.event.EventHandler)方法添加   带有您所需TableColumn.EDIT_COMMIT_EVENT的{​​{1}} EventType   作为第二个论点。使用此方法,您将不会替换   默认实现,但在编辑提交时会通知您   已经发生了。

因此,默认情况下,调用EventHandler会导致commitEdit(...)尝试更新单元格所代表的值。如果通过调用TableColumn设置事件处理程序,则会删除默认行为。

另请注意,默认机制的工作方式是将列TableColumn.setOnEditCommit(...)返回的对象强制转换为cellValueFactory,并调用其WritableValue方法。因此,这将(基本上)仅在表的支持模型使用JavaFX properties pattern时才有效。换句话说,你应该有一些等同于

的东西
setValue()

表格模型中的column.setCellValueFactory(cellData -> cellData.getValue().xxxProperty()); 方法返回xxxProperty()的实现(例如WritableValue个对象)。