JavaFX自定义TextField限制

时间:2015-11-04 01:17:30

标签: java javafx textfield

我正在为我的数学老师申请将平面从其矢量方程式转换为标量方程式。

对于我输入的TextField,我有这段代码。

TextField input = new TextField();
input.setPromptText(" (x,y,z) + q(a,b,c) + p(a,b,c) ");

我想将输入限制为给定格式(一般限制输入格式)。

我能想到这样做的唯一方法就是让线程或动作监听器不断调用

input.getText();

然后比较字符串的每个索引以查看它是否是正确的输入类型(是数字,还是括号......等)。

这似乎是一种非常“无声”的做法......有谁知道更好的方法呢?也许java有一些内置的方法吗?

2 个答案:

答案 0 :(得分:3)

  

您可以使用控制FX 验证支持来完成这项工作:

在您的控制器中,您可以在文本字段中设置验证器:

validationSupport = new ValidationSupport();
        validationSupport.registerValidator(textField, true, ValidationForm.formatValidate);

然后,您可以根据需要在单独的课程中设计验证器:

public class ValidationForm {

    /**
     * Field allows only if correctly formatted
     */
    public static Validator<String> formatValidate = (Control control, String value) -> {
        boolean condition = value != null
                ? !value.matches("^\\({1}+[0-9]+\\,[0-9]+\\,[0-9]+\\){1}+\\+{1}"
                        + "+[a-z]{1}+\\({1}+[0-9]+\\,[0-9]+\\,[0-9]+\\){1}+\\+{1}"
                        + "+[a-z]{1}+\\({1}+[0-9]+\\,[0-9]+\\,[0-9]+\\){1}$") : value == null;

        return ValidationResult.fromMessageIf(control, "Not a valid input \n"
                + "Should be formatted \" (x,y,z) + q(a,b,c) + p(a,b,c) \"",
               Severity.ERROR, condition);
    };
   ...

答案 1 :(得分:2)

查看第三方控制FX库,其中包含validation/decoration输入控件,您可以createRegExValidator。使用regex101来制作正则表达式。验证通过后,您可以在正则表达式上使用pattern matching从输入字符串中检索输入值。

由于这主要是针对您的学习练习,我暂不提供此代码。