![](/img/trans.png)
[英]How do I restore a previous value in JavaFX TableColumn's onEditCommit?
[英]Validation of editable cell in onEditCommit in TableColumn
我正在用JavaFX編寫可編輯表,如果驗證失敗,我想驗證輸入(例如,表/列中是否已經存在相同的值),我想拒絕新值。 換句話說,當用戶在單元格中鍵入新值並按ENTER鍵時,我會進行驗證,如果失敗,我想查看單元格中的舊值。
我的代碼與該示例非常相似http://java-buddy.blogspot.com/2012/04/javafx-2-editable-tableview.html
我以為我可以做這樣的事情
colName.setCellFactory(trainerStringCellFactory);
colName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<GymTrainer, String>>() {
public void handle(TableColumn.CellEditEvent<GymTrainer, String> t) {
GymTrainer newTrainer = new GymTrainer(t.getNewValue(), trainer.getSurrname(), trainer.getRateOfPay());
newTrainer.setTrainerId(trainer.getTrainerId());
if ( !updateTrainer(newTrainer) ) {
// Here I would like to replace value in editable cell
}
}
}
});
有沒有人知道怎么做,或者這樣做是錯誤的地方?
幾天后,我找到了解決該問題的方法。 第一件事是,如果您不更新與TableView中的行關聯的數據(在我的情況下為GymTrainer),則在再次啟動應用程序后,將顯示舊值,因此我要做的是刷新TableColumn,以便從GymTrainer刷新真實值顯示實例。
我使用這篇文章中的解決方法來做到這一點: JavaFX 2.1 TableView刷新項
代碼如下所示:
colName.setCellFactory(trainerStringCellFactory);
colName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<GymTrainer, String>>() {
public void handle(TableColumn.CellEditEvent<GymTrainer, String> t) {
GymTrainer newTrainer = new GymTrainer(t.getNewValue(), trainer.getSurrname(), trainer.getRateOfPay());
newTrainer.setTrainerId(trainer.getTrainerId());
if ( !updateTrainer(newTrainer) ) {
tblTrainers.getColumns().get(0).setVisible(false);
tblTrainers.getColumns().get(0).setVisible(true);
}
}
}
});
也許會幫助別人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.