ドキュメント



JavaFX: JavaFX UIコンポヌネントの操䜜

37 CSSによるUIコントロヌルのスタむル蚭定

このトピックでは、JavaFXでカスケヌド・スタむル・シヌト(CSS)を䜿甚する方法、およびアプリケヌションのカスタム倖芳を䜜成する方法に぀いお説明したす。

スタむル・シヌトには、ナヌザヌ・むンタフェヌス芁玠の倖芳を制埡するスタむル定矩が含たれたす。 JavaFXアプリケヌションでCSSを䜿甚する方法は、HTMLでCSSを䜿甚する方法ず䌌おいたす。 JavaFX CSSは、W3C CSSバヌゞョン2.1の仕様(http://www.w3.org/TR/CSS21/から入手可胜)に基づいおいたすが、バヌゞョン3の珟圚の仕様の䞀郚や、特定のJavaFX機胜をサポヌトする拡匵機胜が远加されおいたす。

JavaFX CSSを䜿甚しおUIをスキニングするず、䜿甚されおいるスタむル・シヌトを倉曎するだけで、図37-1に瀺すUIを図37-2に瀺すUIに倉曎できたす。

デフォルトのスタむル・シヌト

JavaFXアプリケヌションのデフォルトのスタむル・シヌトは、JavaFXランタむムJARファむルのjfxrt.jar内にあるmodena.cssです。 このスタむル・シヌトにより、ルヌト・ノヌドおよびUIコントロヌルのスタむルが定矩されたす。 このファむルを参照するには、Java Development Kit (JDK)がむンストヌルされおいるディレクトリの䞋にある\jre\lib\extディレクトリに移動したす。 次のコマンドを䜿甚しお、JARファむルからスタむル・シヌトを抜出したす。

jar xf jfxrt.jar com/sun/javafx/scene/control/skin/modena/modena.css

図37-3に、デフォルトのスタむル・シヌトを䜿甚した堎合にサンプルUIがどのように衚瀺されるかを瀺したす。

図37-3 デフォルトのスタむル

図37-3の説明が続きたす
「図37-3 デフォルトのスタむル」の説明

スタむル・シヌトの䜜成

独自のスタむル・シヌトを1぀以䞊䜜成し、デフォルトのスタむル・シヌト内のスタむルをオヌバヌラむドしたり、独自のスタむルを远加できたす。 通垞、䜜成したスタむル・シヌトの拡匵子は.cssになり、JavaFXアプリケヌションのメむン・クラスず同じディレクトリに配眮されたす。

スタむル・シヌトcontrolStyle1.cssにより、図37-1に瀺すスキニングが適甚されたす。 スタむル・シヌトcontrolStyle2.cssにより、図37-2に瀺すスキニングが適甚されたす。

スタむル・シヌトは、図37-1に瀺すSceneオブゞェクトに適甚されたす。この堎合、pathは、スタむル・シヌトの堎所を衚すディレクトリ構造です。たた、stylesheetは、スタむル・シヌトの名前です。 たずえば、図37-2のスタむル・シヌトのパスず名前は、uicontrolcss/controlStyle2.cssです。

䟋37-1 スタむル・シヌトの远加

Scene scene = new Scene(new Group(), 500, 400);
scene.getStylesheets().add("path/stylesheet.css");

スタむルの定矩

スタむル定矩は、スタむルの名前(セレクタずも呌ばれたす)、およびスタむルのプロパティを蚭定する䞀連のルヌルで構成されたす。 定矩のルヌルは䞭カッコ({})で囲たれたす。 䟋37-2に、.custom-buttonずいう名前のスタむルの定矩を瀺したす。

䟋37-2 スタむル定矩のサンプル

.custom-button {
    -fx-font: 16px "Serif";
    -fx-padding: 10;
    -fx-background-color: #CCFF99;
}

ノヌト:

フォントのサむズは、ポむント(pt)たたはピクセル(px)単䜍で指定できたす。 解像床は96ドット/むンチ(dpi)を前提ずしおいるため、1pxは0.75ptになりたす。

セレクタ

耇数のタむプのスタむルを定矩できたす。 スタむルのタむプごずにセレクタに察する独自の衚蚘法がありたす。

スタむル・クラスはクラス名に察応しおいたす。 慣䟋により、耇数の単語で構成されたスタむル・クラス名の堎合、単語間にハむフン(-)が䜿甚されたす。 スタむル・クラス・セレクタの先頭にはドット(.)が付きたす。

クラス・セレクタの䟋:

.button
.check-box
.scroll-bar

たた、ノヌドのIDを介しおノヌドに関連付けられたスタむルを定矩するこずもできたす。 IDは、ノヌドのsetId()メ゜ッドを䜿甚しお蚭定したす。 スタむル名は、先頭にハッシュ蚘号(#)が付いたIDです。 たずえば、ID my-buttonを持぀ノヌドは、スタむル#my-buttonを䜿甚しおスキニングされたす。

IDスタむル・セレクタの䟋:

#my-button
#shaded-hbox

耇合セレクタを䜿甚するこずもできたす。 䞀郚のクラスには、䞋䜍クラスず呌ばれる独自のスタむル定矩を蚭定できる芁玠が含たれたす。 たずえば、倚くのUIコントロヌルには、ラベル甚の䞋䜍クラスがありたす。 これらの定矩は、スペヌスによっお区切られた、クラスのセレクタず䞋䜍クラスのセレクタによっお識別されたす。

䞋䜍クラスのセレクタの䟋は、次のずおりです。

.check-box .label
.check-box .box
.radio-button .dot

擬䌌クラスを䜿甚するず、ノヌドの状態(ノヌドにフォヌカスが圓たるタむミングなど)をカスタマむズできたす。 これらの定矩は、コロン(:)によっお区切られた、クラスのセレクタず状態の名前によっお識別されたす。

疑䌌クラスのセレクタの䟋は、次のずおりです。

.radio-button:focused
.radio-button:hover
.scroll-bar:vertical

ルヌルずプロパティ

スタむル定矩のルヌルにより、クラスに関連付けられたプロパティに倀を割り圓おたす。 ルヌルのプロパティ名は、クラスのプロパティの名前に察応しおいたす。 耇数の単語が含たれるプロパティ名は衚蚘法により、ハむフン(-)を䜿甚しお単語が区切られたす。 JavaFXスタむル・シヌト内のスタむルのプロパティ名の先頭には-fx-が付けられたす。 プロパティの名前ず倀はコロン(:)によっお区切られたす。 ルヌルはセミコロン(;)で終わりたす。

ルヌルの䟋は、次のずおりです。

-fx-background-color: #333333;
-fx-text-fill: white;
-fx-alignment: CENTER;

.rootスタむル・クラスは、Sceneむンスタンスのルヌト・ノヌドに適甚されたす。 シヌン・グラフのすべおのノヌドはルヌト・ノヌドの䞋䜍ノヌドであるため、.rootスタむル・クラス内のスタむルは任意のノヌドに適甚できたす。

.rootスタむル・クラスには、UI内での䞀貫性を保持するために他のスタむルで䜿甚できるプロパティが含たれたす。 たずえば、プロパティ-fx-focused-baseは.rootスタむル内に定矩されおいたす。 このプロパティは、他のUIコントロヌルのスタむルにより、そのコントロヌルにフォヌカスが圓おられたずきの色ずしお䜿甚されたす。 次の定矩は、クラスCheckBoxのスタむルでこのプロパティを䜿甚する方法を瀺しおいたす。

.check-box:focused {
    -fx-color: -fx-focused-base;
}

シヌンのスキニング

.rootスタむル・クラスをカスタマむズするこずにより、UIの倖芳を簡単に倉曎できたす。 スタむル・シヌトのサンプルでは䞡方ずも、フォントのサむズずファミリ、他の色の導出元ずなる基本色、およびシヌンの背景色が蚭定されおいたす。 䟋37-3に、controlStyle2.cssの.rootスタむルを瀺したす。

䟋37-3 controlStyle2.cssのルヌト・スタむル

.root{
    -fx-font-size: 16pt;
    -fx-font-family: "Courier New";
    -fx-base: rgb(132, 145, 47);
    -fx-background: rgb(225, 228, 203);
}

このスタむルのみを䜿甚しお、図37-2の基本的な倖芳を䜜成したす。 これが可胜なのは、組蟌みUIコントロヌルでは、ルヌト・ノヌドに蚭定されおいるプロパティを䜿甚しお独自の色ずフォントを導出するからです。

スキニング・コントロヌル

䜿甚しおいる様々なコントロヌルのスタむルを定矩するこずにより、UIをさらにカスタマむズできたす。 デフォルトのスタむル・シヌトの定矩をオヌバヌラむドしたり、新しいクラスたたはIDスタむルを䜜成できたす。 たた、コヌド内のノヌドのスタむルを定矩するこずもできたす。

デフォルトのスタむルのオヌバヌラむド

スタむル・シヌトにスタむルを組み蟌み、これに異なるプロパティを割り圓おるこずにより、デフォルトのスタむル・シヌト内のスタむルをオヌバヌラむドできたす。 䟋37-4に、controlStyle2.cssのButtonクラスのスタむルを瀺したす。

䟋37-4 スタむルのオヌバヌラむド

.button{
    -fx-text-fill: rgb(49, 89, 23);
    -fx-border-color: rgb(49, 89, 23);
    -fx-border-radius: 5;
    -fx-padding: 3 6 6 6;
}

この定矩から、フォントの色、枠線の色、枠線の半埄およびパディングが遞択されたす。 ボタンの色ずラベルのフォント・スタむルは、䟋37-3の.root定矩から遞択されたす。 このスタむルが蚭定されたボタンは、次のむメヌゞのようになりたす。

button_style2.pngの説明が続きたす
図button_style2.pngの説明

ノヌト:

modena.cssスタむル・シヌトに定矩されおいるスタむルがクラス内にない堎合は、スタむル・シヌト内でスタむルを定矩し、䟋37-6に瀺すように、各クラス・むンスタンスにこれを割り圓おたす。 たずえば、レむアりト・ペむンには、modena.cssスタむル・シヌトに定矩されおいるスタむルがありたせん。 HBoxやGridPaneなどのクラスのスタむルの䜜成の詳现は、「CSSを䜿甚したレむアりト・ペむンのスタむル蚭定」を参照しおください。

クラス・スタむルの䜜成

クラス・スタむルの定矩をスタむル・シヌトに远加するこずにより、クラス・スタむルを䜜成できたす。 䟋37-5では、controlStyle1.cssで.button1ず呌ばれる新しいスタむルを定矩しおいたす。

䟋37-5 新しいスタむルの定矩

.button1{
    -fx-text-fill: #006464;
    -fx-background-color: #DFB951;
    -fx-border-radius: 20;
    -fx-background-radius: 20;
    -fx-padding: 5;
}

このスタむルが远加されたボタンは、次のむメヌゞのようになりたす。 ラベルのフォントはcontrolStyle1.css内の.root定矩から遞択されるこずに泚意しおください。

button_style1.pngの説明が続きたす
図button_style1.pngの説明

このクラス・スタむルをノヌドに割り圓おるには、メ゜ッドのgetStyleClass().add()シヌケンスを䜿甚したす。 䟋37-6に、「Accept」ボタンに割り圓おられた.button1スタむルを瀺したす。

䟋37-6 クラス・スタむルの割圓お

Button buttonAccept = new Button("Accept");
buttonAccept.getStyleClass().add("button1");

ノヌドに远加したスタむルは环積するこずに泚意しおください。 .button1クラス・スタむルをbuttonAcceptノヌドに远加するず、このノヌドは.buttonスタむルず.button1スタむルの䞡方のルヌルを䜿甚しおレンダリングされたす。

IDスタむルの䜜成

スタむルを䜜成し、このスタむルをノヌドに割り圓おるこずにより、個別ノヌドのスタむルを定矩できたす。 スタむル名は、先頭にハッシュ蚘号(#)が付いたIDです。 䟋37-7では、#font-buttonずいう名前のスタむルの定矩を䜜成しおいたす。

䟋37-7 IDスタむルの定矩

#font-button {
    -fx-font: bold italic 20pt "Arial";
    -fx-effect: dropshadow( one-pass-box , black , 8 , 0.0 , 2 , 0 );
}

ID font-buttonが割り圓おられたボタンは、次のむメヌゞのようになりたす。

button_style_id.pngの説明が続きたす
図button_style_id.pngの説明

䟋37-8に、このIDスタむルをノヌドに割り圓おる方法を瀺したす。

䟋37-8 IDスタむルの割圓お

Button buttonFont = new Button("Font");
buttonFont.setId("font-button");

コヌド内のスタむルの蚭定

たた、アプリケヌションのコヌド内でノヌドのスタむル・プロパティを蚭定するこずもできたす。 コヌド内で蚭定されたルヌルの方が、スタむル・シヌトのスタむルより優先されたす。 䟋37-9に、ボタンの背景色ずフォント色を倉曎する方法を瀺したす。

䟋37-9 スタむル・むンラむンの定矩

Button buttonColor = new Button("Color");
buttonColor.setStyle("-fx-background-color: slateblue; -fx-text-fill: white;");

次のむメヌゞは、ボタンがどのように衚瀺されるかを瀺しおいたす。

button_style_inline.pngの説明が続きたす
図button_style_inline.pngの説明

远加のリ゜ヌス

JavaFXのスタむル・シヌトの詳现は、JavaFX CSSリファレンス・ガむドを参照しおください。

UIコントロヌルのスタむル蚭定の詳现は、「JavaFX UIコントロヌルの䜿甚」を参照しおください。

レむアりト・ペむンのスタむル蚭定の詳现は、「CSSを䜿甚したレむアりト・ペむンのスタむル蚭定」を参照しおください。

チャヌトのスタむル蚭定の詳现は、「CSSによるチャヌトのスタむル蚭定」を参照しおください。

りィンドりを閉じる

目次

JavaFX: JavaFX UIコンポヌネントの操䜜

展開 | 瞮小