【问题标题】:unable to setText on Textfield on addListener无法在 addListener 上的 Textfield 上设置文本
【发布时间】:2017-07-09 07:51:18
【问题描述】:

示例输入:12345.1

totalAmountDueTextField 的期望输出:12,345.10

TextField totalAmountDueTextField = new TextField("0.00");
Pattern validDoubleText = Pattern.compile("-?\\d*(\\.\\d{0,2})?"); 
TextFormatter<Double> textFormatter = new TextFormatter<>(new DoubleStringConverter(), 0.00, 
        change -> {
            String newText = change.getControlNewText() ;
            if (validDoubleText.matcher(newText).matches()) {
                return change ;
            } else return null ;
        });
totalAmountDueTextField.setTextFormatter(textFormatter)

totalAmountDueTextField.focusedProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue o, Object oldVal, Object newVal) {
            DecimalFormat format = new DecimalFormat("#,##0.00");
            String formattedText = format.format(Double.parseDouble(totalAmountDueTextField.getText()));     
            System.out.println(formattedText);
            totalAmountDueTextField.setText(formattedText);
        }
    });

实际结果

System.out.println(formattedText) : 12,345.10 //OK

totalAmountDueTextField.setText(formattedText) : 12345.1 //这就是问题所在。

还有如何设置初始值为0.00(当前为0.0)?

【问题讨论】:

标签: java javafx javafx-8


【解决方案1】:

使用这个可能对你有帮助

totalAmountDueTextField.setText(new BigDecimal(totalAmountDueTextField.getText())。 setScale(2, RoundingMode.FLOOR));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多