JavaFX コントロールのスタイル設定またはテンプレート化には、さまざまな方法があります。
ビルド済みの JavaFX コントロールは、cssを介してスタイルを設定できます。
事前構築済みの JavaFX コントロールをサブクラス化して、機能やルック アンド フィールを変更することもできます。例として、整数のみを編集するようにカスタマイズされた TextField を作成する IntField があります。
多くの場合、既存のコントロールの束をレイアウトPaneまたはGroupにまとめて配置することで、カスタム コンポーネントを構築できます。融合コンポーネントを構築するメソッドまたはクラスをパラメータ化することにより、コードを使用してカスタム コンポーネント構築を効果的にテンプレート化できます。これは、そのような方法を使用して構築された (および css を介してスタイル設定可能な)デジタルおよびアナログ時計コンポーネントの例です。
また、 fxml ドキュメントの概要のアプローチを使用して、さまざまな fxml ファイルを介してカスタム コンポーネントのレイアウトを管理することもできます。fxml は、velocityなどのテンプレート言語を使用して生成することも、さまざまなレイアウト用にいくつかの異なる静的 fxml ファイルを作成することもできます。静的または生成された fxml は、必要に応じて動的に生成された html サイトのように、Web サーバーから動的に提供することもできます。
カスタム コントロールを構築するもう 1 つの方法は、JavaFX チームが行っているのと同じ方法です (コントロールのスキンおよび動作クラスを作成することにより)。JavaFX 2.2 以降 (およびおそらく将来の JavaFX バージョンでも)、これは、 jfxtrasに取り組んでいる人や、JavaFX プロジェクト のオープン ソース コントロール リポジトリに直接貢献している人など、ライブラリ作成者に最も適しています。
また、css では、コントロールのスキン クラスを指定できることにも注意してください。たとえば、RadioButton には次の css があります。
。ラジオボタン {
-fx-skin: "com.sun.javafx.scene.control.skin.RadioButtonSkin";
}
したがって、考慮している RadioButton の外観をカスタマイズする 1 つの方法は次のとおりです。
- 前にリンクしたオープン ソースの JavaFX リポジトリから、RadioButtonSkinクラス ソースのコピーを取得します。
- それを新しいクラス名にコピーします (例: LinedRadioButtonSkin)。
- 希望の外観になるように変更します。
- プロジェクト用のカスタム CSS スタイルシートを作成します。
- カスタム css スタイルシートで、新しい LinedRadioButtonSkin クラスを使用するようにクラスの
-fx-skin
属性を設定します。.radio-button
新しいスキンが正しく実装され、既存の RadioButtonSkin クラスの動作と同様に既存のButtonBehaviourクラスに接続されている限り、既存のラジオ ボタンと同じ新しいスキン ベースのラジオ ボタンの動作が自動的に取得されます。たとえば、ボタンは、既存の RadioButtonSkin とまったく同じように、マウス クリック、キーボード アクセラレータ、タッチ イベント、ToggleGroups との対話などに応答し、既存のRadioButton API を使用してアクセスできます。つまり、ボタンは RadioButton のフィール (動作) を保持しますが、異なる内部コンポーネント、レイアウト、CSS スタイルを使用することで、まったく異なるものにすることができます。
カスタム スキン ルートに進むことに決め、このプロセスで支援が必要な場合は、jfxtras チームのメンバーに連絡して、新しいスキンを jfxtras プロジェクトに寄付することを検討してください。
警告
JavaFX 2.2 の Skin クラスと Behavior クラスはプライベート実装 API であり、公的にサポートされている API ではなく、パブリック API (JavaFX の次のメジャー リリース - JavaFX/JDK 8 で予定されている) に移行するにつれて、将来変更される予定です。今日は、慎重に行ってください。それらがパブリック API に移行したら、これらのクラスを使用して独自のコントロールを作成する方法について、より多くの情報とチュートリアルが表示されることを期待しています。
パッケージ名と API メソッドは、Skin と Behavior から独自のコントロールを構築するための API が内部プライベート実装からパブリック API に移行するにつれて変更されます。たとえば、にcom.sun.javafx.scene.control.behavior.BehaviorBase
なる可能性がjavafx.scene.control.behavior.Behavior
あるため、BehaviorBase を拡張するクラスを作成した場合、クラスのソースを変更して新しい名前と API を参照し、再コンパイルするまで、JavaFX の新しいバージョンに対して実行されません。
これと同じ理由で、API が公開されて最終版になるまで、このトピックに関する優れた本はありません。プライベート API に対して書かれた本に含まれるサンプル コードは、API が公開されるとすぐに古くなり、どちらも更新されないためです。パブリック API に対してコンパイルしたり、新しいバージョンの JavaFX に対して実行したりしないでください。