gpt4 book ai didi

Javafx TableView 编辑验证

转载 作者:行者123 更新时间:2023-12-01 06:13:54 24 4
gpt4 key购买 nike

我构建了一个用于显示数据的小型 JavaFX TableView。用户应该能够编辑 TableView 中的数据。问题是:在某些字段中只允许使用特定值。如果用户输入了错误的值,该字段将设置为 0。

这是我的类(class):

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”(这个值是不允许的)并回车时,调试器跳转到上面的 catch block ,将 observablelist 中的特定值设置为 0(我可以在调试器,当我展开这个对象时)但 tableviewcell 仍然显示 q 而不是 0(已被系统更正)...

为什么 tableview 不显示 observablelist-Object 的正确值???

最佳答案

这是必需的,但自 Java8u60 以来是全新的(是的 - 他们在更新中更改了 API!?!)有一个 refresh() TableView 本身的方法。

/**
* Calling {@code refresh()} forces the TableView control to recreate and
* repopulate the cells necessary to populate the visual bounds of the control.
* In other words, this forces the TableView to update what it is showing to
* the user. This is useful in cases where the underlying data source has
* changed in a way that is not observed by the TableView itself.
*
* @since JavaFX 8u60
*/
public void refresh() {
getProperties().put(TableViewSkinBase.RECREATE, Boolean.TRUE);
}

它太新了,甚至在官方 oracle 文档中都没有...所以我无法提供链接。

干杯。

关于Javafx TableView 编辑验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com