モジュール javafx.controls

パッケージjavafx.scene.control

JavaFXユーザー・インタフェース・コントロール(UIコントロールまたは単純なコントロール)は、特に多くの異なるアプリケーション・コンテキストでの再利用に適しているJavaFXシーングラフの特化されたノードです。 これらは、設計者および開発者が視覚的に高度なカスタマイズを実行できるように設計されています。 また、レイアウト・システムで正しく機能するように設計されています。 たとえば、よく知られているコントロールとして、ButtonLabelListViewTextFieldなどがあります。

コントロールはシーングラフ内のNodesであるため、GroupsImagesMediaTextおよびbasic geometric shapesと自由に混在させることができます。 新しいUIコントロールを記述することは容易ではありませんが、それを使用し、スタイルを設定することは、特に既存のWeb開発者にとっては、非常に容易です。

このドキュメントの残りの部分では、JavaFX UIコントロール・ライブラリの基本的なアーキテクチャ、既存のコントロールのスタイルを設定する方法、カスタム・スキンを作成する方法、およびコントロールを使用してより複雑なユーザー・インタフェースを構築する方法について説明します。

アーキテクチャ

コントロールは、従来のMVC設計パターンに従っています。 Controlはモデルです。 状態とその状態を操作する関数の両方が含まれています。 Controlクラス自体は、レンダリングの方法やユーザー操作の内容を認識しません。 これらのタスクはSkin ("view")に委任され、ビューとコントローラの機能が内部的に別のクラスに分離されますが、現時点ではコントローラの側面のためのパブリックAPIはありません。

すべてのコントロールはControlクラスから拡張され、このクラスはParentノードであり、これはNodeです。 どのコントロールにも、コントロールのビューの実装である単一のスキンへの参照があります。 コントロールは、コントロールの最小サイズ、最大サイズおよび優先サイズ、ベースライン・オフセットおよびヒット・テスト(包含および交差)を計算する責任をスキンに委任します。 また、コントロールにフォーカスがあるときにそのコントロールで発生するすべての関連キー・イベントを実装して対応することも、スキンで行うか、またはスキンが委任します。

Control

コントロールはParentから拡張されるため、リーフ・ノードではありません。 開発者または設計者の視点では、コントロールは多くの場合リーフ・ノードであるかのように考えることができます。 たとえば、開発者または設計者は、ButtonをRectangleやその他の簡単なリーフ・ノードであるかのように考えることができます。

コントロールは、サイズ変更可能であるため、各シーングラフ・パルスでサイズが優先サイズに自動的に設定されます コントロールの幅および高さを設定しても、優先サイズには影響を与えません。 レイアウト・コンテナで使用すると、コントロールに適用される(またはコントロールに手動で指定された)レイアウト制約によって、配置とサイズ設定の方法が決まります。

コントロールのスキンはいつでも変更できます。 その場合、コントロールにはレイアウトが必要であることを示すマークが付きます。これは、スキンを変更すると、コントロールの優先サイズが変化する場合があるためです。 コントロールを作成する時点でスキンを指定しないと、すべての組込みコントロールに対して、デフォルトのCSSベースのスキンが提供されます。

各コントロールには、オプションでツールチップが指定される場合があります。 ツールチップは、一定の時間マウスでコントロールをポイントすると、コントロールに関する情報(通常はテキスト)をユーザーに表示するコントロールです。 他のコントロールと同様に、CSSからスタイルを設定できます。

focusTraversableは、ノードではデフォルトでfalseになっていますが、コントロールではデフォルトでtrueになるようにオーバーライドされます。 デフォルトでフォーカス可能にする必要がないコントロール(ラベルなど)では、これがfalseにオーバーライドされます。

getMinWidth、getMinHeight、getPrefWidth、getPrefHeight、getMaxWidth、getMaxHeightの各関数は、スキンに直接委任されます。 baselineOffsetメソッドは、スキンのノードに委任されます。 サブクラスでこれらの委任を変更することはお薦めしません。

コントロールのスタイル設定

コントロールの外観をカスタマイズする方法が2つあります。 最も困難かつ最も柔軟なアプローチは、コントロールで実現しようとするビジュアルを正確に実装したコントロールの新しいスキンを作成することです。 詳細は、スキンのドキュメントを参照してください。

組込みのコントロールのスタイルを設定するための最も簡単で非常に強力な方法は、CSSを使用することです。 このリリースでは、次に示すCSSの説明は、組込みのコントロールのために提供されているデフォルトのスキンにのみ適用されることに注意してください。 今後のリリースでは、これらのCSS機能の利用を希望するカスタムのサード・パーティ・コントロールでも一般的に使用できるようになります。

組込みのコントロール用のデフォルトの各スキンは、複数の個別にスタイル設定可能な領域またはリージョンで構成されています。 これは、<div>で構成され、CSSからスタイル設定されるHTMLページとよく似ています。 個々のリージョンは、背景、ボーダー、イメージ、余白、マージンなどとともに描画される場合があります。 JavaFX CSSのサポートには、複数の背景およびボーダーを保持し、色を派生させることが含まれます。 これらの機能により、CSSからJavaFX内のコントロールの外観を変更することが非常に容易になります。

組込みのコントロールのデフォルトのスキンを描画するために使用される色は、すべて基本色、強調色および背景色から得られます。 コントロールの基本色を変更するのみで、派生したグラデーションを変更したり、デフォルトのスキンと視覚的に適合しながら視覚的に目立つボタンやその他のコントロールを作成できます。

シーングラフの他のすべてのノードと同様に、コントロールも外部のスタイルシートを使用したり、コントロールに直接スタイルを指定してスタイルを設定できます。 たとえば、ノードに直接スタイルを指定する方が、表現と理解は容易になりますが、HTML CSSでHTML要素のクラスまたはIDを使用する場合と同じように、外部のスタイルシートを使用し、コントロールのstyleClassまたはIDを使用することをお薦めします。

各UIコントロールでは、外部のスタイルシートからコントロールのスタイルを設定するために使用できるstyleClassを指定します。 たとえば、Buttonコントロールには「button」CSSスタイル・クラスが指定されます。 CSSスタイル・クラス名は、キャメル・ケースではなくハイフン区切りの小文字で、それ以外は完全に同じです。 たとえば、Buttonはbutton、RadioButtonはradio-button、Tooltipはtooltipというようになります。

各コントロールのクラスのドキュメントでは、スタイル設定可能なデフォルトのスキン・リージョンを定義しています。 JavaFXに備えられているCSS機能の詳細は、「CSSリファレンス・ガイド」を参照してください。