javaFX:コンポーネントのカスタムCSSプロパティ



Javafx Custom Css Properties



概要

cssプロパティは有効ですか? background-color、font-size thisと同様に、cssプロパティとは何かのスタイルレンダリングのコンポーネントと特性を決定します。

css属性の独自の定義をカスタマイズする理由



実際、パッケージjavaFXのコンポーネントを使用すると、キャンバス、色、背景ブラシの厚さなどのキャンバスの機能に時間がかかり、Javaコントロールが必要です。これにより、残りの置換cssの場合、全体的な色とスタイルが決まります。大きな変更があり、キャンバスと他の場所への効果の描画、「スタイル」の一貫性がなく、キャンバスにもこれらの属性がある場合は非常に厄介です。cssプロパティに従って何をペイントするかを決定できます。これは比較的良好です。

だからそれを行う方法

CSSプロパティjavafxアセンブリは、2つのCssMetaData、StyleablePropertyによって制御されます。使用しやすいように、javaFXは、このファクターが開始するカスタム属性を作成するためのファクターインターフェイスを提供します。実際、このように非常に単純に開始する工場では、次の新しいcssプロパティを簡単に追加できます。



CSSプロパティjavafxコンポーネントが作成されますCssMetaDataStyleableProperty両方のコントロール、使用を容易にするために、javaFXは、このファクターからカスタムプロパティを作成するためのファクターインターフェイスを提供します。実際、このように非常に単純に開始する工場では、次の新しいcssプロパティを簡単に追加できます。

public class StyleableCanvas extends Canvas { private static final StyleablePropertyFactory<StyleableCanvas> factory = new StyleablePropertyFactory<>(Canvas.getClassCssMetaData()) private StyleableProperty<Color> background = factory.createStyleableColorProperty(this, 'background', '-c-background-color') protected static final CssMetaData<StyleableCanvas, Color> BACKGROUND_META_DATA = factory.createColorCssMetaData('-c-background-color', c -> c.background, Color.BLACK) @Override public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() { return factory.getCssMetaData() } public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData() { return factory.getCssMetaData() } }

では、彼の意味を説明してください。

StyleablePropertyFactoryは、プロパティ、プラント、およびMetaDataプロパティ、特定のコンポーネント属性値を格納するために使用されるプロパティを作成するために使用されます。metaDataは、プロパティ名およびコントロールのプロパティ値とgetCssMetaDataの間の対応の説明と見なすことができ、通常は手動では行いません。 getClassMetaData呼び出しは、一般にjavafxの解析であり、レンダリング時間は読み取りcssスタイルを通過します。新しいプロパティをjavafxに適切に解決できるように、両方の戻り値に新しいプロパティを追加する必要があります。



プロパティが保護されているメタデータについては、カスタムのプロパティを読み取るために彼と一緒にパッケージでアクセスする必要があるため、実際には、外側に新しいプロパティを取得しない場合は、キャンバスを描画します。彼はできますそれはプライベートです。

cssの解析には少し時間がかかります。上記のコンソールに印刷する場合は、setStyleプロパティがすぐに有効にならないため、印刷でイベントをリッスンできます。

試験結果

-C-プロパティの上に設定された背景。デフォルトでは彼は黒です。私は彼を#FFFに連れて行き、マウスイベントで読み取りました。

画像

canvas.setOnMouseMoved(e -> { System.out.println(StyleableCanvas.BACKGROUND_META_DATA .getStyleableProperty(canvas).getValue()) })

画像
が表示され、効果的な新しい属性が表示されます。

PS:元の記事、最初の記事はほとんど知られている、CSDN期間は来ない。