2013-11-28 31 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

相关问题