Нужна помощь, чтобы ограничить текстовое поле только десятичными числами - PullRequest
0 голосов
/ 10 января 2019

Хорошо, я сейчас разрабатываю графический интерфейс в JavaFX. У меня есть текстовое поле, которое должно учитывать двойные. В настоящее время он допускает двойные числа, но позволяет пользователю добавлять несколько десятичных знаков

что я хочу: 92,8123

что я не хочу: 92..5.78

Я пытался возиться с этим, но я недостаточно разбираюсь в регулярных выражениях, чтобы ограничить текстовое поле до того, что я хочу правильно.

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

tpo - имя текстового поля

1 Ответ

0 голосов
/ 10 января 2019

Я думаю, что это может сделать то, что вы хотите:

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, будет проверяться, каким будет новый текст, и будет ли он соответствовать заданному шаблону. Поскольку пользователь, скорее всего, вводит символы по одному (а не вставляет), нам нужно разрешить, чтобы более поздняя часть шаблона еще не была набрана, поэтому нам нужно разрешить ноль или более цифр после точки, и если мы хотим Чтобы пользователь мог полностью удалить свой ввод, нам нужно, чтобы все было необязательно. Вам нужно будет проверить окончательный шаблон при подаче, чтобы убедиться, что они ввели полный действительный дубль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...