javafx treetableview单元格值未更新

javafx treetableview单元格值未更新,javafx,refresh,treetableview,Javafx,Refresh,Treetableview,更新数据模型javafx treetableview单元格值后的事件未得到更新 我在这里使用示例代码@ (例15-2) 点击按钮,我试图更新第一项:employees.get(0.setName(“测试”) 有什么技巧可以用来更新treetableview吗?这个例子有点奇怪,它返回了一个ReadOnlyStringWrapper包装单元格值工厂的属性值。因此,它没有将列中显示的值直接绑定到Employee类中的属性,而是将它们绑定到一个新的只读属性,该属性包装在单元格上调用updateItem

更新数据模型javafx treetableview单元格值后的事件未得到更新

我在这里使用示例代码@ (例15-2)

点击按钮,我试图更新第一项:employees.get(0.setName(“测试”)


有什么技巧可以用来更新treetableview吗?

这个例子有点奇怪,它返回了一个
ReadOnlyStringWrapper
包装单元格值工厂的属性值。因此,它没有将列中显示的值直接绑定到
Employee
类中的属性,而是将它们绑定到一个新的只读属性,该属性包装在单元格上调用
updateItem(…)
时检索到的值。这意味着,只有在单元格上调用了
updateItem(…)
方法时,基础数据才会更新。(我不知道他们为什么会这样做。)因此,您应该发现,例如,如果您更改了值,然后在
TreeTableView
中折叠根节点并再次展开,则在展开根节点后会显示新值(因为这会导致调用单元格的
updateItem(…)
方法)

要使单元格在数据更改时更新,请将单元格值直接绑定到模型(
Employee
)类中定义的属性:


你能展示一些代码吗:特别是单元格值工厂?在我看来,示例中的工厂是错误的……新的TreeTableColumn(“员工”);empColumn.setPrefWidth(150);empColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures参数)->新的ReadOnlyStringWrapper(param.getValue().getValue().getName());我正在使用示例15-2中的代码,这些示例的质量通常很低。例如,属性的类型应该是
StringProperty
,而不是
SimpleStringProperty
,它们的
get*()
set*(…)
方法应该是
final
。如果我有时间的话,我会向jira提出改进的请求。太好了!!!非常感谢你帮助我。另外,哪一个地方是获取JavaFX8组件示例的最佳地方,可以作为参考。您找对了地方,而且大多数官方教程都非常好。他们似乎只是在TableView、TreeView和TreeTableView示例源代码上下了一点功夫。
empColumn.setCellValueFactory( param -> param.getValue().getValue().nameProperty());
emailColumn.setCellValueFactory( param -> param.getValue().getValue().emailProperty());