我正在使用controlfx验证来验证某些文本字段,并且我有2个问题,它们实际上涉及同一主题,因此我将两者都放在这个问题中:
我注册验证器
validator.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
,我确实对两个样式进行了样式设置,效果很好。当我选择错误验证器时,如果验证器不满意,则会显示失败的样式。这样,该部分就可以正常工作,并且当验证器满足时,该字段看起来“正常”,因此我还可以设置该默认外观的样式。 我希望有3个视觉表示阶段,但在应用程序一开始就应该对字段进行样式设置,以便向用户显示此字段是必需的,然后在文本字段状态更改时样式也应该更改,无论是成功样式还是错误样式。我不知道controlfx验证是否具有此功能,或者我是否必须使用伪类(以及如何做)。
我想要的是这张图片上的东西。
第二个问题是,该字段的末尾有那些标签(我圈了其中一个,红色圈了一个) 是否可以使用CSS javafx和文本字段来执行此操作,还是我必须使用文本流或其他一些第三方库?
我做了这样的事情,尽管我不知道它是否是最好的解决方案,但它仍然有效
CustomTextField ctf = new CustomTextField();
support.setValidationDecorator(new StyleClassValidationDecoration("myErrorClass", "myWarningClass"));
support.registerValidator(ctf, true, vald::checkContainsE);
myLabel.setMinWidth(5);
myLabel.setMinHeight(20);
ctf.setRight(myLabel);
support.invalidProperty().addListener((observable, oldValue, newValue) -> ctf.pseudoClassStateChanged(PseudoClass.getPseudoClass("negative"), oldValue));
support.invalidProperty().addListener((observable, oldValue, newValue) -> myLabel.pseudoClassStateChanged(PseudoClass.getPseudoClass("negative"), oldValue));
和CSS
.custom-text-field:negative{
-fx-background-color: lightblue;
}
#testlabel{
-fx-background-color: red;
}
#testlabel:negative{
-fx-background-color: green;
}
现在这确实有效,但是我想知道这样做的效率如何,是否可以将伪类分配给所有控件类型,例如所有Button类型或标签类型的伪类,还是我必须编写方法然后应用到我想要的所有按钮或标签上。
另一种选择是只扩展自定义文本字段并编写我自己的控件。