需要帮助以将文本框限制为仅十进制数字

时间:2019-01-10 18:16:05

标签: java javafx

好的,我目前正在用JavaFX设计GUI。我有一个文本框,需要允许双打。它目前允许双打,但仍允许用户添加多个小数

我想要的是:92.8123

我不想要的:92..5.78

我试图弄弄它,但是我对正则表达式的理解不足以将文本框限制在我想要的范围之内。

tpo.textProperty().addListener((observable, oldValue, newValue) -> {
        if (!newValue.matches("\\d*")) tpo.setText(newValue.replaceAll("[^\\d.]", ""));
    });

tpo是文本框的名称

1 个答案:

答案 0 :(得分:3)

我认为这可能会满足您的要求

import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
...

TextField tpo = ...;
tpo.setTextFormatter(new TextFormatter<>((change) -> {
        String text = change.getControlNewText();
        if (text.matches("\\d*\\.?\\d*")) {
            return change;
        } else {
            return null;
        }
    }));

对于应用于TextField的每次更改,这都会检查新文本是什么,并确保它与给定的模式匹配。由于用户可能一次只能输入一个字符(而不是粘贴),因此我们需要允许模式的后半部分尚未输入,因此我们需要在点后允许零个或多个数字,如果需要为了使用户能够完全删除他们的输入,我们需要所有内容都是可选的。您需要检查提交时的最终模式,以确认他们输入了完整的有效双精度值。