当前位置: 首页 > 知识库问答 >
问题:

Javafx TextFormatter退格问题

琴宾鸿
2023-03-14

我正在使用javafx。场景控制TextFormatter,用于将textfield格式化为货币字段。下面显示了我的代码。

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());

一切正常,只是我不能将整个文本字段退格。

任何帮助都是可观的。非常感谢。

共有1个答案

刘和昶
2023-03-14

从TextFormatter.getFilter()的留档:

过滤器本身是一个UnarySwitator,它接受TextFor事例。更改对象。它应该返回一个TextFor事例。更改包含实际(过滤)更改的对象。返回null拒绝更改。

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

一个选项是简化TextFormatter:

return new TextFormatter<Number>(
    new NumberStringConverter(CURRENCY_DECIMAL_FORMAT));
 类似资料:
  • 本文向大家介绍Linux中Oracle的sqlplus下退格和Del键无效的问题解决,包括了Linux中Oracle的sqlplus下退格和Del键无效的问题解决的使用技巧和注意事项,需要的朋友参考一下 PS:近来因工作需要业余在学习oracle,发现通过SecureCRT或putty等SSH客户端远程登录Linux下oracle的sqplus时,输错字符后按Backspace键或Del键删除时,

  • 1.微信申请退款,同意后,自动微信支付退款是怎么设置的? 下载好的退款证书上传到网站根目录,如下图所示。 2.微信支付的订单要退款显示订单不存在? 微信返回信息是提示订单找不到,先确定当前订单是不是微信支付的;使用微信支付,但是微信那边检测支付金额为0,所以没有订单,微信没有检测到订单,所以要线下。

  • 我正在制作一个自定义文本字段(绘制文本而不是使用JTextField)。我可以输入字符,但退格只清除一个字符。如果我再写一些东西,我可以再次删除一个字符。我不知道为什么。 KeyListener: 聊天对象中的keyTyped()方法: 我正在绘制当前的文本字符串。

  • 我是Android的初学者,所以我一直坚持使用intent方法。我创建了三个java类,MainActivity提供了DetailActivity的意图,在DetailActivity中,textView处理来自MainActivity的数据。细节活动给出了答案的意图(所有答案都有片段)。问题是,当我点击答案左上角的backwords图标时。DetailActivity中的textView为空。那

  • 问题内容: 我正在寻找有关如何捕获退格事件的解决方案,大多数堆栈溢出答案都在Objective-C中,但是我需要使用Swift语言。 首先,我为UITextField设置了委托,并将其设置为self 然后,我知道使用委托方法来检测是否按下了退格键,因为所有代码都在Objective- C中。我需要在Swift中使用以下方法。 问题答案: 斯威夫特4.2 较早的Swift版本