データを表示するための小さな JavaFX TableView を作成します。ユーザーは、テーブルビューでデータを編集できる必要があります。問題は、特定のフィールドで特定の値のみが許可されることです。ユーザーが間違った値を入力した場合、フィールドは 0 に設定されます。
これが私のクラスです:
private ObservableList shots;
@FXML
void initialize() {
this.shots = FXCollections.observableArrayList(match.getShots()); // values from database
tblShots.setItems(shots);
tblShots.setEditable(true);
lblserienid.setText(GUIConstants.idPlaceHolder);
lblresult.setText(GUIConstants.idPlaceHolder);
colShotID.setCellValueFactory(new PropertyValueFactory<Schuss, String>("idSchuss"));
colRing.setCellValueFactory(new PropertyValueFactory<Schuss, String>("ringString"));
colRing.setCellFactory(TextFieldTableCell.forTableColumn());
colRing.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Schuss, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Schuss, String> t) {
Schuss s = (Schuss) t.getTableView().getItems().get(
t.getTablePosition().getRow());
try {
int ring = Integer.parseInt(t.getNewValue());
s.setRing(ring);
} catch (Exception ex) {
s.setRing(0);
}
SerienauswertungViewController.this.refreshTable();
}
});
colRing.setEditable(true);
// .... omitted
}
private void refreshTable(){
if(shots.size()>0) {
btnDeleteAll.setDisable(false);
btnEdit.setDisable(false);
int res = 0;
for(int i=0;i<shots.size();i++){
Schuss s = (Schuss)shots.get(i);
res += s.getRing();
}
lblresult.setText(""+res);
}
else {
btnDeleteAll.setDisable(true);
btnEdit.setDisable(true);
lblresult.setText(GUIConstants.idPlaceHolder);
}
}
したがって、tableviewcell を編集して「q」と入力し (この値は許可されていません)、Enter キーを押すと、デバッガーは上記の catch ブロックにジャンプし、observablelist の特定の値を 0 に設定します (デバッガーでこれを見ることができます。このオブジェクトを展開します) が、tableviewcell には 0 ではなく q が表示されます (システムによって修正されています)...
テーブルビューにobservablelist-Objectの正しい値が表示されないのはなぜですか???