我想使用ValidationSupport来检查textfield2的内容与textfield1的内容。这是我试图做的:
validationSupport = new ValidationSupport();
validationSupport.registerValidator(textfield2, false, (Control c, String newValue)
-> ValidationResult
.fromMessageIf(textfield2,
"Should contain texfield",
Severity.WARNING,
!newValue.contains(textfield1.getText())));
validationSupport.initInitialDecoration();
首先填充textfield1,然后texfield2按预期工作:警告装饰显示在textfield2上,直到textfield1内容不包含在texfield2内容中。
但是从textfield 1&中的相同内容开始2,并尝试再次更改texfield1(因此此时,textfield1内容与textfield2内容不同),我期待警告装饰立即显示在texfield2上,事实并非如此!
确实为了再次检查validationSupport,我需要再次更新textfield2。只有在texfield2内容更新后,才会再次检查ValidatorSupport,并相应地更新装饰!
我发现总是让装饰更新的唯一方法是删除以前的registerValidator并在textfield1 textProperty上添加一个监听器,以便每次更改textfield1内容时为texfield2注册一个新的验证器:
textfield.textProperty().addListener((observable, oldValue, newValue)
-> validationSupport.registerValidator(textfield2, false, (Control c, String str)
-> ValidationResult
.fromMessageIf(textfield2,
"Should contain texfield1",
Severity.WARNING,
!str.contains(textfield.getText()))));
这是有效的(意思是当我更改textfield1时,文本字段2上的装饰立即更新)但我觉得它不是正确的解决方案,但却无法找到另一个/更好的解决方案。这是正确的方法吗?如果没有,那么正确的方法是什么?有什么建议?感谢。