我希望实体(控件或属性)具有不同的状态,可以通过CSS着色。
例如,考虑TextField,它可以包含两种值,正常和错误。一旦它包含错误值,它应显示为“红色”。但实际的颜色应该可以从CSS中定义。
这可以实现吗?
我发现了很多Styleable*
接口或类,但它们看起来能够接受任何样式。
我可以写和实体,它从值中获得它的风格吗?
答案 0 :(得分:3)
您可以使用Node.pseudoClassStateChanged
:
TextField tf = new TextField();
final PseudoClass shortText = PseudoClass.getPseudoClass("short");
final PseudoClass longText = PseudoClass.getPseudoClass("long");
tf.textProperty().addListener((observable, oldValue, newValue) -> {
tf.pseudoClassStateChanged(shortText, false);
tf.pseudoClassStateChanged(longText, false);
if (newValue!=null && !newValue.isEmpty()) {
if (newValue.length() < 5) {
tf.pseudoClassStateChanged(shortText, true);
} else {
tf.pseudoClassStateChanged(longText, true);
}
}
});
用这样的css:
.text-field:short {
-fx-background-color: #ffaaaa;
}
.text-field:long {
-fx-background-color: #aaffaa;
}
虽然说实话,但我并不完全确定Style Class与Pseudo Class的优缺点是什么。
答案 1 :(得分:0)
在特定属性的更改事件中,您可以更改该实体(控件或属性)的样式类以应用多种颜色。
为此,您需要在CSS中添加多种颜色样式
然后你可以使用下面的代码更改样式类。
textfield.getStyleClass().add("red");
例如,在TextField的动作事件中,您可以检查用户在TextField中输入的值,如果输入的值是&#34;错误&#34;然后获取文本字段的对象,并使用上面的代码将样式类名称设置为它。