我想要具有不同状态的实体(控件或属性),这些状态可以通过 CSS 着色。
例如,考虑 TextField,它可以包含两种类型的值:正常值和错误值。一旦包含错误值,应显示“红色”。但实际的颜色应该可以由 CSS 定义。
这可以实施吗?
我发现了很多Styleable*
接口或类,但它们看起来能够接受任何样式。
我可以写一个实体,它从值中派生出它的风格吗?
您可以使用Node.pseudoClassStateChanged https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#pseudoClassStateChanged-javafx.css.PseudoClass-boolean-:
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 的优缺点是什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)