3 ボタン
JavaFX APIで使用可能なButton
クラスにより、開発者はユーザーがボタンをクリックしたときのアクションを処理できます。Button
クラスはLabeled
クラスの拡張です。テキストまたはイメージ、あるいはその両方を表示できます。図 3-1に、様々な効果のあるボタンを示します。この章では、これらの各ボタンのタイプを作成する方法について学習します。
ボタンの作成
JavaFXアプリケーションでButton
コントロールを作成するには、例 3-1に示すButtonクラスの3つのコンストラクタを使用します。
例3-1 ボタンの作成
//A button with an empty text caption. Button button1 = new Button(); //A button with the specified text caption. Button button2 = new Button("Accept"); //A button with the specified text caption and icon. Image imageOk = new Image(getClass().getResourceAsStream("ok.png")); Button button3 = new Button("Accept", new ImageView(imageOk));
Button
クラスはLabeled
クラスを拡張するため、次のメソッドを使用して、アイコンまたはテキスト・キャプションのないボタンの内容を指定できます。
-
setText(String text)
メソッド - ボタンのテキスト・キャプションを指定します。 -
setGraphic(Node graphic)
メソッド - グラフィカル・アイコンを指定します
例3-2に、テキスト・キャプションのないアイコンのあるボタンを作成する方法を示します。
例3-2 ボタンへのアイコンの追加
Image imageDecline = new Image(getClass().getResourceAsStream("not.png")); Button button5 = new Button(); button5.setGraphic(new ImageView(imageDecline));
このコード・フラグメントは、アプリケーションに追加したときに図 3-2に示すボタンを作成します。
例3-2および図3-2では、アイコンはImageView
オブジェクトです。ただし、javafx.scene.shape
パッケージにある形状など、他のグラフィカル・オブジェクトも使用できます。ボタンのテキストとグラフィカル・コンテンツを定義する場合は、setGraphicTextGap
メソッドを使用してその間にギャップを設定できます。
Button
クラスのデフォルトのスキンは、ボタンの次の表示状態を識別します。図3-3は、アイコンのあるボタンのデフォルトの状態を示します。
アクションの割当て
各ボタンの主な機能は、クリックされたときにアクションを生成することです。Button
クラスのsetOnAction
メソッドを使用して、ユーザーがボタンをクリックしたときに何が起こるかを定義します。例3-3に、button2のアクションを定義するコード・フラグメントを示します。
例3-3はActionEvent
の処理方法を示し、ユーザーがbutton2を押したときに、ラベルのテキスト・キャプションが「Accepted」になることを示します。
Button
クラスを使用して、必要な数のイベント処理メソッドを設定し、特定の動作を実行したり、視覚的な効果を適用できます。
効果の適用
Button
クラスはNode
クラスの拡張であるため、javafx.scene.effect
パッケージのすべての効果を適用して、ボタンの視覚的な外観を向上します。例3-4では、onMouseEntered
イベントが発生したときにDropShadow
効果をbutton3に適用します。
例3-4 DropShadow効果の適用
DropShadow shadow = new DropShadow(); //Adding the shadow when the mouse cursor is on button3.addEventHandler(MouseEvent.MOUSE_ENTERED, (MouseEvent e) -> { button3.setEffect(shadow); }); //Removing the shadow when the mouse cursor is off button3.addEventHandler(MouseEvent.MOUSE_EXITED, (MouseEvent e) -> { button3.setEffect(null); });
図3-4は、マウス・カーソルをあわせたときと外したときのbutton3の状態を示します。
ボタンのスタイル設定
ボタンの視覚的な外観を拡張する次の手順では、Skin
クラスで定義されているCSSスタイルを適用します。JavaFX 2アプリケーションのCSSの使用とHTMLのCSSの使用は、どちらも同じCSS仕様に基づいているために類似しています。
スタイルを個別のCSSファイルに定義し、getStyleClass
メソッドを使用してこれをアプリケーションで有効にできます。このメソッドはNode
クラスから継承し、すべてのUIコントロールに使用できます。例3-5および図3-4は、このアプローチを示しています。
例3-5 ボタンのスタイル設定
//Code added to the CSS file .button1{ -fx-font: 22 arial; -fx-base: #b6e7c9; } //Code in the ButtonSample.java file button1.getStyleClass().add("button1");
-fx-font
プロパティはbutton1のフォント名とサイズを設定します。-fx-base
プロパティはボタンに適用されているデフォルトの色をオーバーライドします。その結果、button1は図3-5に示すように明るいグリーンで、テキストのサイズも大きくなります。
関連APIドキュメント