Validation JavaFX验证理解

Validation JavaFX验证理解,validation,javafx,listener,textfield,digits,Validation,Javafx,Listener,Textfield,Digits,我在网上发现了这段代码,它阻止用户在文本字段中输入除数字以外的任何内容。我想在我的作业代码中使用它,但我不明白发生了什么。有人能帮我理解它为什么有效吗?多谢各位 valueTextField.textProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observ

我在网上发现了这段代码,它阻止用户在
文本字段中输入除数字以外的任何内容。我想在我的作业代码中使用它,但我不明白发生了什么。有人能帮我理解它为什么有效吗?多谢各位

valueTextField.textProperty().addListener(new ChangeListener<String>() {
       @Override
       public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            if (!newValue.matches("\\d{0,9}([\\.]\\d{0,9})?")) {
                valueTextField.setText(oldValue);
            }
        }
});
valueTextField.textProperty().addListener(新的ChangeListener()){
@凌驾

public void changed(observeValue这可能是一种不使用regex的暴力方法。它只是尝试将输入转换为目标值。如果失败,将设置旧值(根据您的方法)

alpha.textProperty().addListener(新的ChangeListener()){
@凌驾

更改公众假期(ObservalEvalue这是一个onchange监听器,因此当值被更改时,将执行此函数。由于它是一个on change监听器,它将新值和旧值作为参数提供给您。在这种情况下,此方法使用正则表达式检查新值是否为数字。如果它不是整数,则将其设置回旧值。注意t、 虽然这可能有效,但在
text
属性上使用
ChangeListener
并不是过滤输入的正确方法,您应该使用。@Slaw我看到了关于
TextFormatter
的内容,但找不到足够简单或清晰的示例,因为我对Java和JavaFX非常陌生。我如何允许负号(-)用于添加负值?否-在收到属性更改通知时更改属性是错误的。textformatter是一种方法
alpha.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                Double dou = 0.0;
                boolean valid = false;
                try {
                    dou = Double.parseDouble(newValue);
                    if (dou >= 0 && dou <= 1) { // some conditions if you need a specific range
                        valid = true;
                    }

                } catch(Exception e) {}
                if (valid) {
                    alphaInput = dou;
                    Qnet.setAlpha(dou);
                    alpha.setText(dou.toString());
                } else {
                    alpha.setText(oldValue);
                }
            }
        });