gpt4 book ai didi

JavaFX 无法捕获编辑提交功能中的异常

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:57 25 4
gpt4 key购买 nike

我无法弄清楚如何捕获 setOnEditCommit() 函数中的异常。

TableColumn<Property, Float> value_clm = new TableColumn<Property, Float>("Value");
value_clm.setCellValueFactory(new PropertyValueFactory<Property, Float>("value"));
value_clm.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConverter()));
value_clm.setSortable(false);
value_clm.setOnEditCommit(
new EventHandler<CellEditEvent<Property, Float>>() {
public void handle(CellEditEvent<Property, Float> t) {
try{
((Property) t.getTableView().getItems().get(t.getTablePosition().getRow())).setValue(t.getNewValue());
saved = false;
}catch(NumberFormatException e){
((Property) t.getTableView().getItems().get(t.getTablePosition().getRow())).setValue(t.getOldValue());
}
}
}
);

看看如果用户键入除“.”之外的非数字字符会发生什么情况。到文本字段并按 enter 抛出 NumberFormatException ,因此我尝试在抛出异常时执行 try/catch 来处理异常,但当用户按 enter 时,也会发生同样的情况。我不知道如何解决这个问题,但在触发 handle() 函数之前,似乎会检查 newValue 是否为 float 。我们的目标也是使用户无法键入除“.”之外的非数字字符。进入文本字段。

如果你们中的任何人可以提供帮助,我将非常感激。

最佳答案

答案是实现您自己的字符串到浮点转换器,因为默认转换器几乎只使用 Float.valueOf,而不处理异常。

<小时/>
value_clm.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConverter()));

变成:

value_clm.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConverter() {
@Override
public Float fromString(String value) {
try {
return super.fromString(value);
} catch(NumberFormatException e) {
return Float.Nan; // An abnormal value
}
}
}));

然后您可以检查此异常值:

value_clm.setOnEditCommit(t -> {            
if(t.getNewValue().isNaN()) {
t.getRowValue().setValue(t.getOldValue());
} else {
t.getRowValue().setValue(t.getNewValue());
}
});

关于JavaFX 无法捕获编辑提交功能中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278181/

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