JavaFX TableView。如何检查用户输入的uniqe值

时间:2017-01-26 13:33:41

标签: java javafx tableview

我遇到以下问题:我使用JavaFX编写应用程序。我使用TableView。用户应该使用它来观察,添加和删除数据。我有ID字段应该是唯一的。因此,当用户完成编辑时,我必须检查结果是否唯一。如果它是独特的,我必须解雇变化。或者更好的是,我必须在数据更新时检查它,如果有必要,请跳过更新。

我有三列的TableView

    colID.setCellValueFactory((TableColumn.CellDataFeatures<CDataType, String> cell) -> cell.getValue().getSID());
    colCaption.setCellValueFactory((TableColumn.CellDataFeatures<CDataType, String> cell) -> cell.getValue().getSCaption());
    colType.setCellValueFactory((TableColumn.CellDataFeatures<CDataType, String> cell) -> cell.getValue().getSType());

    colID.setCellFactory(TextFieldTableCell.forTableColumn());
    colCaption.setCellFactory(TextFieldTableCell.forTableColumn());
    colType.setCellFactory(TextFieldTableCell.forTableColumn());

    lstObservable = FXCollections.observableList(lstData, (CDataType param)->{

        param.getSID().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {

                System.out.println("getSID().ChangeListener: Changed: " + observable + ")"+ observable.getClass() + ") [" + oldValue + " -> " + newValue + "]");
            }
        });

        return new Observable[]{param.getSID(),
                                param.getSCaption(),
                                param.getSType()
        };
    });

    tabView.setItems(lstObservable);

通常的做法是什么?我确信这个问题并不新鲜,但我找不到解决方案。

UPD:我的意思是我不明白我应该处理哪些事件来干扰用户的变化。我想它一定是ChangeListener但是如果我改回数据项值我得到了无限递归。

1 个答案:

答案 0 :(得分:1)

您可以在编辑提交中处理此问题 - 如下所示:

https