私は次の問題があります。JavaFXを使用して自分のアプリケーションを書きます。私はTableViewを使用します。ユーザーは、データの監視、追加、削除に使用する必要があります。ユニークでなければならないIDフィールドがあります。だから、ユーザーがそれを編集し終えると、私は結果が一意かどうかをチェックする必要があります。それがユニークなら、私は変化を却下しなければなりません。または、データが更新され、必要であれば更新をスキップする瞬間にそれを確認する必要があります。JavaFX TableView。そのユーザー入力uniqe値を確認する方法
私は、このための通常の練習は何の3つの列
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でなければならないと思いますが、データ項目の値を元に戻すと、無限再帰が得られます。
もが、最も簡単なアプローチは、そのセットがあることが含まれている場合、セット内のすべてのIDを収集し、新しい値を挿入チェックイン時にすることですid。かなり高速に動作する数百万のレコードを持っていない場合は、 – Enigo
問題は私がどこでそれをチェックすべきかわからないということですか? ChangeListenerの場合、どのように変更を避けることができますか? – Yura