拦截JavaFX TableView中的setValueAt()等效项

时间:2014-12-21 07:39:40

标签: java javafx javafx-2 javafx-8

我正在尝试过渡到使用JavaFX和Swing。我非常喜欢这些桌子以及它们提供的极大简洁性(以及创建出色的建筑师和使用lambdas的包装的潜力)。但是,除了ObservableList和一些GUI行为应用程序之外,我对数据绑定并不十分兴奋。我是不可变性的忠实粉丝,我的应用程序通常会将所有编辑内容编写到数据库中,并在重新拉动编辑后的数据后重新构建对象,而不是直接编辑对象。

遵循Oracle的文档,我使用了ReadOnlyObjectWrapper,它运行得很好。我甚至围绕它建立了一些工厂方法。

 firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() {
     public ObservableValue<String> call(CellDataFeatures<Person, String> p) {
         return new ReadOnlyObjectWrapper(p.getValue().getFirstName());
     }
  });

但是,如果我想在不使用数据绑定的情况下使其可编辑,该怎么办?如果我想拦截新编辑的值并将其写入数据库而不是使用绑定属性,该怎么办?我想我得到的是JTable有的老派setValueAt()方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用this指南编辑和更新数据(部分&#34;编辑表格中的数据&#34;)。

另一方面,您可以尝试使用自己的Cell Factory,如here。在我看来,这种方法更灵活,因为如果需要,我不仅可以更新模型。我也可以自定义输入单元格(可以是TextField或TextArea等)