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

标签 java javafx

我无法弄清楚如何捕获 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/

相关文章:

java - 出于某种原因使用 FileWriter 和 BufferedWriter 清除文件?

java播放mp3声音

button - Javafx : Activate a tooltip with a button

java - 如何忽略TableView中的负值和零值?

java - 如何使用 jsoup 删除标签但保留给定的标签

java - 在 log4j2 jdbcappender 中设置日期时如何处理 null?

java - 可以诱导 javah 生成行结尾一致的 .h 文件吗?

java - 通过第二个元素统一数组的 Arraylist

JavaFX SceneBuilder 2 相对路径异常

javafx - javaFx 中的 Json 和 XML Webservice