1

JavaFX では、プロパティバインディングChangeListenerを使用して、またはと同じ目的を達成できることがよくありますInvalidationListener。変更の影響を受けるプロパティを別の場所に設定する必要がある場合、バインドされたプロパティを設定できないため、バインドに問題があります (バインドが双方向であり、独自の問題がある場合を除きます)。

そのような背景から、バインドされているプロパティ (スキンなど) が、スタイル ファイル内の CSS を介して変更できるかどうかを知る必要があります。

バインディングでデフォルトを設定したいいくつかのコントロールに取り組んでいます。「CSS の変更」が値の設定と同じように扱われる場合 (これは機能しません)、リスナーに頼る必要があります。

入力していただければ幸いです。ありがとう!

4

1 に答える 1

3

短い答え、いいえ。

AStyleablePropertyには対応する がありCssMetaDataます。この後者のクラスには、次のようなメソッドisSettable(Styleable)があります(強調鉱山):

指定されたノードの対応するプロパティが設定可能かどうかを確認します。このメソッドは、指定されたプロパティのスタイルが検索される前に呼び出されます。プロパティを展開せずにプロパティが設定可能かどうかをコードで確認できるように、これは抽象的です。通常、プロパティが null でないか、バインドされていない場合、プロパティは設定可能です

このメソッドの存在は、StyleableProperty何らかの理由で a が設定できない可能性があることを示しています。

独自StyleablePropertyの および対応するCssMetaDataを実装する場合は、このメソッドを実装する必要があります。StyleablePropertyも実装する場合、Propertyこのメソッドは がバインドされているかどうかを確認し、Propertyバインドされている場合は返すfalse必要があります。これは、すべての内部 に対して行われることですStyleableProperty(これもPropertyです)。また、 を使用StyleablePropertyFactoryしている場合は、が のインスタンスであるCssMetaDataかどうかがチェックされ、バインドされた状態がチェックされます。StyleablePropertyProperty

isSettabletrue が返されたとしても、CSS エンジンがStyleableProperty. あなたが自分自身に言及したように、境界Propertyを設定することはできません。のすべての標準実装はProperty、そうしようとすると例外をスローします。

そうは言っても、プロパティの設定方法には注意する必要があります。の設定方法には優先順位がありStyleablePropertyます。のJavadoc は、StyleablePropertyどのメソッドが他のメソッドよりも優先されるかを示します。

StyleableProperty を使用すると、javafx.beans.property を CSS からスタイル設定できます。

このインターフェースにより、CSS 処理と javafx.beans.property の間の調整が可能になります。実装は、値を設定するための優先順位が昇順であり、同じ重要性を想定していることを保証します。

  1. Application.setUserAgentStylesheet(java.lang.String) のユーザー エージェント スタイルシートのスタイル
  2. Node.setOpacity(double) の呼び出しなど、コードから設定された値
  3. Scene.getStylesheets() または Parent.getStylesheets() の作成者スタイルシートのスタイル
  4. Node.setStyle(java.lang.String) からのスタイル
于 2018-07-15T11:21:39.353 に答える