あなたは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;
}
正直に言うが、私はスタイルクラス対の長所と短所が何であるかを完全にわからないんだけど疑似クラス。
'' PseudoClass''は、設定されているか設定されていないため、ブール状態の管理がずっと簡単です。通常のCSSクラスは、各ノードに関連付けられた 'String'の' List'として格納されます。 'List'であるので、重複を含むことができます。そのリストからスタイルクラスを追加したり削除したりすることはできますが、特定のスタイルクラスのコピーを複数追加しないように気を付けなければなりません。したがって、このような使用例では、 'PseudoClass'を使用するとコードがより洗練されます。 –
説明をありがとう!スタイルクラスがノード(JavaFXまたはプレーンCSSのいずれか)に対して複数回存在する場合、特定の動作がありますか?私は一度しか現れないものとして扱う以外に、妥当な行動を考えることができるかどうかはわかりません。 – Itai
CSSマッチングルールは、スタイルクラスがノード上に存在するかどうかを調べるだけです。リストに複数回追加されている場合は、クラスに一致します。 'myNode.getStyleClass()。remove(" some-style ");'は最初のオカレンスを削除するので、誤って複数回追加した場合は、これが(おそらく)獲得されます。あなたが探している効果がありません...本当にトリッキーです'updateItem()'が呼び出される時期をあまり支配していないカスタムセルの実装では、 –