2016-04-27 7 views
0

私は、異なる状態を持つエンティティ(コントロールまたはプロパティ)を持っていたいと思います。これはCSSで色付けすることができます。JavaFXで読み取り専用スタイルを実装していますか?

たとえば、2つの値の並べ替えを含むTextFieldについては、通常と誤っています。間違った値を含むと、それは "赤"と表示されるはずです。しかし実際の色はCSSから定義可能でなければなりません。

これは実装できますか?

私はたくさんのインターフェイスやクラスを見つけましたが、どんなスタイルでも受け入れられるように見えます。

値からスタイルを派生させて書くことができますか?

答えて

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; 
} 

正直に言うが、私はスタイルクラス対の長所と短所が何であるかを完全にわからないんだけど疑似クラス。

+1

'' PseudoClass''は、設定されているか設定されていないため、ブール状態の管理がずっと簡単です。通常のCSSクラスは、各ノードに関連付けられた 'String'の' List'として格納されます。 'List'であるので、重複を含むことができます。そのリストからスタイルクラスを追加したり削除したりすることはできますが、特定のスタイルクラスのコピーを複数追加しないように気を付けなければなりません。したがって、このような使用例では、 'PseudoClass'を使用するとコードがより洗練されます。 –

+0

説明をありがとう!スタイルクラスがノード(JavaFXまたはプレーンCSSのいずれか)に対して複数回存在する場合、特定の動作がありますか?私は一度しか現れないものとして扱う以外に、妥当な行動を考えることができるかどうかはわかりません。 – Itai

+0

CSSマッチングルールは、スタイルクラスがノード上に存在するかどうかを調べるだけです。リストに複数回追加されている場合は、クラスに一致します。 'myNode.getStyleClass()。remove(" some-style ");'は最初のオカレンスを削除するので、誤って複数回追加した場合は、これが(おそらく)獲得されます。あなたが探している効果がありません...本当にトリッキーです'updateItem()'が呼び出される時期をあまり支配していないカスタムセルの実装では、 –

0

特定のプロパティの変更イベントでは、複数の色を適用するために、そのエンティティ(コントロールまたはプロパティ)のスタイルクラスを変更できます。
これには、CSS に複数のカラースタイルを追加し、次に、以下のコードを使用してスタイルクラスを変更する必要があります。例えば

textfield.getStyleClass().add("red"); 

テキストフィールドのオブジェクトを取得し、使用してそれにスタイルのクラス名を設定し、その後、テキストフィールドのアクションイベントに、あなたは、TextFieldに入力されている値は、ユーザ確認することができ、入力された値は、「誤った」であれば上記のコード。

関連する問題