Javafx TextFormatter 退格问题

标签 java javafx

我正在使用javafx.scene.control.TextFormatter将文本字段格式化为货币字段。下面显示了我的代码。

private static final double DEFAULT_VALUE = 0.00d;
private static final String CURRENCY_SYMBOL = "Rs"; //
public static final DecimalFormat CURRENCY_DECIMAL_FORMAT
        = new DecimalFormat(CURRENCY_SYMBOL + "###,##0.00");

public static TextFormatter<Double> currencyFormatter() {
    return new TextFormatter<Double>(new StringConverter<Double>() {
        @Override
        public String toString(Double value) {
            return CURRENCY_DECIMAL_FORMAT.format(value);
        }

        @Override
        public Double fromString(String string) {
            try {
                return CURRENCY_DECIMAL_FORMAT.parse(string).doubleValue();
            } catch (ParseException e) {
                return Double.NaN;
            }
        }
    }, DEFAULT_VALUE,
            change -> {
                try {
                    CURRENCY_DECIMAL_FORMAT.parse(change.getControlNewText());
                    return change;
                } catch (ParseException e) {
                    return null;
                }
            }
    );
}

//format textfield into a currency formatted field
text_field.setTextFormatter(SomeClass.currencyFormatter());

一切正常,除了我无法退格整个文本字段。

enter image description here

任何帮助将不胜感激。谢谢!

最佳答案

来自documentation of TextFormatter.getFilter() :

The filter itself is an UnaryOperator that accepts TextFormatter.Change object. It should return a TextFormatter.Change object that contains the actual (filtered) change. Returning null rejects the change.

如果文本没有数字,则无法对其进行解析,在这种情况下您将返回 null,从而导致键入更改被拒绝。

一个选择是简化您的 TextFormatter:

return new TextFormatter<Number>(
    new NumberStringConverter(CURRENCY_DECIMAL_FORMAT));

关于Javafx TextFormatter 退格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46941039/

相关文章:

java - 从 SFTP 位置下载 zip 或 exe 文件

java - 如何在 Android 中读取 Chrome 历史记录

java - 嵌套异常是 java.sql.SQLException : Invalid column name ORACLE

java - 如何增加 JavaFx ControlsFx 自动完成建议列表的高度?

Javafx .exe 在调用 javafx.scene.effect.DropShadow 时崩溃

canvas - 绘制后javafx FXML Canvas为空

java - 在 LinkedHashMap 中结合 remove 和 put 方法

layout - JavaFX - VBox 中是否可以有滚动条?

JavaFX8.我是否必须为每个 FXMLLoader 设置资源包?

java - 当部署在 Glassfish 中时,基于 Spring-WS 的 SOAP 服务返回 405