簡體   English   中英

驗證TableColumn中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM