您可以使用
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 vs. Pseudo Class的优缺点。



