JavaFX自定义TextField限制

问题描述:

我正在为我的数学老师将一个平面从其向量方程形式转换为其标量方程形式的应用程序。JavaFX自定义TextField限制

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

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

我想限制输入到给定的格式(限制输入的格式一般)。

我能想到这样做的唯一办法,就是让一个线程或动作监听者不断呼吁

input.getText(); 

然后比较字符串的各项指标,看它是否是正确类型的输入(是一个数字,或者是一个括号......等)。

这似乎是一个非常“不高兴”的做法...有没有人知道这样做的更好方法?也许java有一些内置的方法呢?

+0

您可能需要考虑使用多个文本字段和标签的组合,而不是单个解析的文本字段值。 – jewelsea

+0

这就是我最初要做的事情,但最终我会得到9个不同的文本字段。这个项目不仅仅是为了达到目的,也是一种学习体验。 @jewelsea –

您可以使用控制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); 
    }; 
    ... 

查看第三方控制FX库的功能validation/decoration的输入控件,你可以为它createRegExValidator。使用regex101来塑造你的正则表达式。一旦验证通过,您可以在正则表达式上使用pattern matching从输入字符串中检索输入值。

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

+0

去了regex101并创建了这个“\(\ d,\ d,\ d \)\ + [az] \(\ d,\ d,\ d \)\ + [az] \(\ d, \ d,\ d \)“不确定我从哪里出发。 –