我正在使用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
}
}
}
});
有没有人知道如何做到这一点,或者这可能是错误的地方?
答案 0 :(得分:1)
几天后我找到了解决这个问题的方法。第一件事是,如果你没有更新与TableView中的行相关的数据(在我的情况下它是GymTrainer),那么在再次启动应用程序之后会显示旧的值,所以我必须要做的就是刷新TableColumn所以真正的值来自 显示GymTrainer实例。
我使用此帖子的解决方法做到了:JavaFX 2.1 TableView refresh items
代码看起来像这样:
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);
}
}
}
});
也许它会帮助某人。