java - 需要帮助将文本框限制为仅显示十进制数字

标签 java javafx

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

我想要的是:92.8123

我不想要的:92..5.78

我尝试摆弄它,但我对正则表达式的理解不足以将文本框限制为我想要的内容。

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

tpo是文本框的名称

最佳答案

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

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 的每个更改,这将检查新文本是什么并确保它与给定的模式匹配。由于用户可能一次输入一个字符(而不是粘贴),因此我们需要允许模式的后面部分可能尚未键入,因此我们需要允许在点后输入零个或多个数字,并且如果我们想要的话为了让用户能够完全删除他们的输入,我们需要一切都是可选的。您需要在提交时检查最终模式,以验证他们输入了完整有效的 double 。

关于java - 需要帮助将文本框限制为仅显示十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54134684/

相关文章:

java - 请求 POJO AXIS2 Web 服务的参数未传递给 POJO

java - 带有 WAR 文件的 Linux 上 Tomcat 6 的 JNDI 资源问题

java - Gradle 运行使返回值始终为1

JavaFx 可调整大小

java - 如何同时更新缓存的 Java 对象

java - 单独的相机类别还是合并在一起?

java - Hamcrest 匹配器无法匹配 boolean 类型属性

java - 使用 fxml (scenebuilder) 制作的进度条来使用方法中的值

JavaFX 去除工具栏渐变

Javafx:如果服务消息更新(标签绑定(bind)到消息),标签变为空白