我遇到以下问题:我使用JavaFX编写应用程序。我使用TableView。用户应该使用它来观察,添加和删除数据。我有ID字段应该是唯一的。因此,当用户完成编辑时,我必须检查结果是否唯一。如果它是独特的,我必须解雇变化。或者更好的是,我必须在数据更新时检查它,如果有必要,请跳过更新。
我有三列的TableView
colID.setCellValueFactory((TableColumn.CellDataFeatures<CDataType, String> cell) -> cell.getValue().getSID());
colCaption.setCellValueFactory((TableColumn.CellDataFeatures<CDataType, String> cell) -> cell.getValue().getSCaption());
colType.setCellValueFactory((TableColumn.CellDataFeatures<CDataType, String> cell) -> cell.getValue().getSType());
colID.setCellFactory(TextFieldTableCell.forTableColumn());
colCaption.setCellFactory(TextFieldTableCell.forTableColumn());
colType.setCellFactory(TextFieldTableCell.forTableColumn());
lstObservable = FXCollections.observableList(lstData, (CDataType param)->{
param.getSID().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
System.out.println("getSID().ChangeListener: Changed: " + observable + ")"+ observable.getClass() + ") [" + oldValue + " -> " + newValue + "]");
}
});
return new Observable[]{param.getSID(),
param.getSCaption(),
param.getSType()
};
});
tabView.setItems(lstObservable);
通常的做法是什么?我确信这个问题并不新鲜,但我找不到解决方案。
UPD:我的意思是我不明白我应该处理哪些事件来干扰用户的变化。我想它一定是ChangeListener但是如果我改回数据项值我得到了无限递归。答案 0 :(得分:1)
您可以在编辑提交中处理此问题 - 如下所示:
https