2013-11-28 76 views
2

我正在使用JavaFX編寫可編輯表格我想驗證輸入(例如,如果驗證失敗,是否已存在相同的值)我想要拒絕新值。換句話說,當用戶在單元格中輸入新值並點擊ENTER時,我會進行驗證,如果失敗,我想查看單元格中的舊值。TableColumn中的onEditCommit中可編輯單元格的驗證

我的代碼看起來非常相似,這個例子 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

幾天後,我發現如何處理這個問題。首先,如果你不更新與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); 
     } 
    } 
    } 
}); 

也許這將幫助別人。

+0

你有沒有找到永久的解決方案呢? – Jeevanantham

相關問題