在TableColumn中的onEditCommit中验证可编辑单元格

时间:2013-11-28 08:29:01

标签: java validation javafx-2 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
       }
     }
   }
 });

有没有人知道如何做到这一点,或者这可能是错误的地方?

1 个答案:

答案 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);
       }
    }
  }
 });

也许它会帮助某人。