3 CSSを使用したレイアウト・ペインのスタイル設定
このトピックでは、CSSを使用して、JavaFX SDKで提供されるレイアウト・ペインのスタイルを指定する方法について説明します。
レイアウト・ペインでは、パディング、スペース、位置合せなどのプロパティを使用して、ペインの表示方法に関連する要素を管理します。カスケーディング・スタイル・シート(CSS)を使用することにより、一連のプロパティを定義し、それらを複数のレイアウト・ペインに割り当てて、JavaFXアプリケーションの標準の外観を設定できます。また、CSSを使用して個々のレイアウト・ペインをカスタマイズすることもできます。
このトピックでは、「組込みのレイアウト・ペインの使用」に示されているサンプルを使用して、CSSを使用して様々なレイアウト・ペインのスタイルを設定する例を示します。図3-1に、作成する新しい外観を示します。
LayoutSampleCSS.java
ファイルには、このユーザー・インタフェースをビルドするためのソース・コードが含まれています。LayoutSampleCSS.zip
ファイルには、サンプル・アプリケーションのNetBeans IDEプロジェクトが含まれています。
スタイル定義の作成
固有のスタイル・クラス.button
および.check-box
があるボタンやチェック・ボックスなどのコントロールとは異なり、レイアウト・ペインには事前定義されたスタイル・クラスがありません。レイアウト・ペインのスタイルを指定するには、スタイル・シートを作成して、必要なスタイル・クラスを定義する必要があります。その後、アプリケーションのコードで、作成するレイアウト・ペインに適切なスタイル・クラスを割り当てます。
たとえば、すべてのHBox
ペインの背景色とパディングおよびスペースのプロパティを同一にするには、例3-1に示すように、.hbox
という名前のスタイルを作成します。
スタイル・クラスをペインに割り当てて、作成する各HBox
ペインにこのスタイルを使用します。例3-2は、2つのペインに割り当てられたスタイルを示しています。
例3-2 HBoxペインへのスタイルの割当て
HBox hbox = new HBox(); hbox.getStyleClass().add("hbox"); HBox hb = new HBox(); hb.getStyleClass().add("hbox");
レイアウト・ペインのスタイル・プロパティ
CSSを使用して、あらゆるタイプのレイアウト・ペインに対して背景、枠線およびパディングのプロパティを設定できます。いくつかのタイプのレイアウト・ペインには、追加のプロパティを設定できます。たとえば、HBox
およびVBox
ペインには、スペースと位置合せのプロパティを設定でき、タイル・ペインには、方向、推奨行数、推奨列数およびその他のプロパティを設定できます。ペインの背景と枠線には、イメージを使用できます。
各タイプのレイアウト・ペインで使用可能なプロパティのリストは、JavaFX CSSリファレンス・ガイドを参照してください。Region
クラスにリストされているプロパティは、Region
クラスの子孫であるすべてのレイアウト・ペインで使用できます。
シーンへのスタイル・シートの割当て
スタイル・シートを準備した後、そのスタイル・シートをアプリケーションのシーンに追加する必要があります。これにより、すべてのノードが、スタイル・シートで定義されたスタイルにアクセスできるようになります。例3-3は、レイアウト・サンプルのスタイル・シートの追加方法を示しています。このサンプルでは、スタイル・シートはアプリケーションのクラス・ファイルと同じディレクトリにあります。
レイアウト・サンプルのスタイル設定
レイアウト・サンプルには、JavaFXレイアウト・パッケージで提供される組込みのレイアウト・ペインの例が含まれています。このサンプルのスタイル設定は、様々なレイアウト・ペインでのCSSの使用方法の例を示します。
スタイル・シートlayoutstyles.css
には、図3-1で使用されたスタイルが含まれています。
共有プロパティのスタイルの定義
すべてのレイアウト・ペインには、CSSを使用して管理できる一連の基本プロパティがあります。これには、ペインの背景、枠線、パディング、形のプロパティなどが含まれます。複数のペインでこれらのプロパティのスタイル設定が共通している場合、単一のスタイル・クラスを定義し、そのクラスを各ペインに割り当てることができます。
カスタマイズされたレイアウト・サンプルでは、いくつかのレイアウト・ペインに同じ背景色が使用されています。この色は、例3-4に示されている.pane
スタイル・クラスを使用して設定されます。
ペインに対して背景色の設定のみが必要な場合は、割り当てる必要があるのは.pane
スタイルのみです。追加のスタイルを設定する必要がある場合は、ペインに複数のスタイルを割り当てることができます。例3-5では、.pane
スタイルのみをアンカー・ペインに追加し、.pane
スタイルと.grid
スタイルをグリッド・ペインに追加しています。
枠線付きペインのスタイル設定
枠線付きペインには、共有プロパティのスタイルの定義で説明されている基本セット以外の追加プロパティはありません。レイアウト・サンプルでは、枠線付きペインはスタイルが設定されていません。ただし、枠線付きペインのスタイルを指定するには、他のペインの場合と同様にスタイル・クラスを定義して、それをペインに割り当てます。
HBoxペインのスタイル設定
すべてのレイアウト・ペインに共通のプロパティの基本セットに加え、HBox
ペインには、位置合せ、スペース、および高さの占有に関するプロパティがあります。
図3-1に示されているレイアウト・ペインには、2つのHBox
ペインが含まれています。最初のHBox
ペインは上部にあり、「Current」ボタンと「Projected」ボタンが含まれています。2番目のHBox
ペインは下部付近にあり、「Save」ボタンと「Cancel」ボタンが含まれています。
カスタマイズされたレイアウト・サンプルでは、両方のHBox
ペインに同じ背景色とスペースが指定されています。これらのプロパティは、例3-1に示されているスタイル定義で設定されます。
「Save」ボタンと「Cancel」ボタンを含む2番目のHBox
には、図3-2に示すように、角の丸めとパディングの縮小も指定されています。
定義したスタイル設定をHBox
ペインに対して使用するには、.hbox
スタイルをそのペインに割り当てます。パディングをオーバーライドし、角を丸めるための追加のプロパティを設定するには、例3-6に示されているスタイル定義を使用して、IDを2番目のHBox
ペインに設定します。
例3-7は、2番目のHBox
ペインへのスタイルの割当て方法を示しています。
VBoxペインのスタイル設定
すべてのレイアウト・ペインに共通のプロパティの基本セットに加え、VBox
ペインには、位置合せ、スペース、および幅の占有に関するプロパティがあります。
図3-1の左側のリージョンにあるVBox
ペインでは、.pane
スタイル・クラスからの背景が使用されています。枠線、パディングおよびスペースは、例3-8に示すように、.vbox
スタイル・クラスで設定されます。
例3-8 .vboxスタイル・クラス
.vbox { -fx-border-color: #2e8b57; -fx-border-width: 2px; -fx-padding: 10; -fx-spacing: 8; }
例3-9は、VBox
ペインへのスタイルの割当て方法を示しています。
スタック・ペインのスタイル設定
すべてのレイアウト・ペインに共通のプロパティの基本セットに加え、スタック・ペインには位置合せのプロパティがあります。レイアウト・サンプルでは、スタック・ペインはスタイルが設定されていません。ただし、スタック・ペインのスタイルを指定するには、他のペインの場合と同様にスタイル・クラスを定義して、それをペインに割り当てます。
グリッド・ペインのスタイル設定
すべてのレイアウト・ペインに共通のプロパティの基本セットに加え、グリッド・ペインには、行と列間のスペース、グリッドの位置合せ、およびグリッド行の表示に関するプロパティがあります。
図3-1の中央のリージョンにあるグリッドには、丸い角と、グリッド自体よりも少し小さい白い背景が指定されています。例3-10に示されている.grid
スタイル・クラスは、このスタイルを設定し、パディング・プロパティと行と列間のスペースのプロパティを設定します。
例3-10 .gridスタイル・クラス
.grid { -fx-background-color: white; -fx-background-radius: 5.0; -fx-background-insets: 0.0 5.0 0.0 5.0; -fx-padding: 10; -fx-hgap: 10; -fx-vgap: 10; }
例3-11は、グリッドへのスタイルの割当て方法を示しています。
このグリッドには、このサンプルの他のレイアウト・ペインで使用されている背景色が指定されていません。ただし、このグリッドを含んでいるアンカー・ペインでは、その背景色が使用されています。グリッドでその親の背景色が使用されるのを回避するには、そのグリッドの背景を目的の色に設定する必要があります。
フロー・ペインまたはタイル・ペインのスタイル設定
すべてのレイアウト・ペインに共通のプロパティの基本セットに加え、フロー・ペインには、位置合せ、方向、および行と列間のスペースに関するプロパティがあります。タイル・ペインには、位置合せ、方向、行と列間のスペース、推奨行数と推奨列数、および推奨幅と推奨の高さに関するプロパティがあります。
レイアウト・サンプルでは、図3-1の右側のリージョンにフロー・ペインまたはタイル・ペインを使用できます。スタイル・クラスに設定されたプロパティは両方のタイプのペインに共通であるため、このサンプルでは同じサンプル・スタイル・クラスが使用されています。例3-12に示されている.flow-tile
スタイル・クラスは、パディング・プロパティと行と列間のスペースのプロパティを設定します。
フロー・ペインとタイル・ペインでは、背景色に.pane
スタイル・クラスも使用されています。例3-13は、フロー・ペインとタイル・ペインへのスタイルの割当て方法を示しています。
背景イメージの使用
背景イメージのプロパティを設定することにより、レイアウト・ペインの背景としてイメージを使用できます。スタイル・クラスにイメージ、サイズ、位置および繰返しを指定できます。図3-3は、レイアウト・サンプル・ユーザー・インタフェースの別のバージョンを示しており、ここでは左側のVBox
ペインと、「Save」および「Cancel」ボタンを含むHBox
ペインに背景イメージが使用されています。
例3-15は、背景イメージを追加するスタイル・クラス定義を示しています。
例3-15 背景イメージを使用したスタイル
.vbox { -fx-background-image: url("graphics/arrow_t_up_right.png"); -fx-background-size: 96, 205; -fx-background-repeat: no-repeat; -fx-border-color: #2e8b57; -fx-border-width: 2px; -fx-padding: 10; -fx-spacing: 8; } #hbox-custom { -fx-background-image: url("graphics/cloud.png"); -fx-background-size: 64,64; -fx-padding: 18 4 18 6; -fx-spacing: 25; -fx-background-radius: 5.0; } #button-custom { -fx-rotate: 45; -fx-text-alignment: center; }
次の点に注意してください。
-
イメージは/graphicsディレクトリに配置されていますが、これはアプリケーションのクラス・ファイルと同じレベルです。
-
矢印のイメージは要求よりも小さく、雲のイメージは要求よりも大きかったため、これらのイメージは
-fx-background-size
プロパティを使用してサイズ変更されました。 -
矢印が
VBox
ペインの背景で繰り返されるのを回避するために、-fx-background-repeat
プロパティがno-repeat
に設定されています。 -
ボタンに角度を付けるために、
#button-custom
という名前の新しいスタイル・クラスが定義され、「Save」および「Cancel」ボタンのIDがbutton-custom
に設定されています。