我想知道JavaFX中TableCell的commitEdit()方法是否更新了该行所代表的对象的属性。
答案 0 :(得分:0)
默认情况下,
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
个对象)。