【问题标题】:Validation of editable cell in onEditCommit in TableColumn验证 TableColumn 中 onEditCommit 中的可编辑单元格
【发布时间】:2013-12-14 04:38:36
【问题描述】:

我正在使用 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
       }
     }
   }
 });

有没有人知道如何做到这一点,或者这样做的地方不对?

【问题讨论】:

    标签: java validation javafx-2 tablecolumn


    【解决方案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);
           }
        }
      }
     });
    

    也许它会对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多