JavaFXの解説も今回で3回目です。
今回はラベルやボタンなどのGUI部品であるコントロールについて紹介していきます。しかし、その前にコントロールなどのスーパークラスとなるNodeクラスについて、簡単に触れておきましょう。
Node
Nodeクラスは前回説明した通り、JavaFXで扱うすべての描画要素のスーパークラスとなるクラスです。このため、Nodeクラスが定義している機能は、すべての描画要素で使用する ことができます。
ノードの主な機能を次に示します。
- イベント処理
- ドラッグ&ドロップ
- CSS
- 変形
- エフェクト
マウスのクリックやキー入力などのイベント処理を行うイベントハンドラはNodeクラスのプロパティとなっています。たとえば、マウスがクリックされた時のイベント処理はsetOnMouseClickedメソッド、キー入力があった時のイベント処理はsetOnKeyTrypedメソッドでイベントハンドラを設定します。
ただし、ActionEventなど一部のイベントはNodeクラスではなく、ボタンなどのクラスで扱うことになります。
ドラッグ&ドロップもイベント処理の一種と考えることができます。Swingではドラッグ&ドロップを実現するのはかなり複雑でしたが、JavaFXではすっきりと実装することが可能です。
CSSはHTMLなどで見た目の指定を行うために使用します。このCSSをJavaFXでも使用することができます。外部のスタイルシートファイルを使用することも可能ですが、個々のノードにCSSを埋め込むこともできます。
個々に埋め込む場合、NodeクラスのsetStyleメソッドで指定します。たとえば、ボタンのフォントのサイズを24ptに設定するのであれば次のように記述します。
Button button = ...;
button.setStyle("-fx-font-size: 24pt;");
CSSのプロパティ名の-fx-はJavaFXのベンダープレフィックスです。JavaFXで使用するCSSのプロパティはすべてこの-fx-というベンダープレフィックスを付加する必要があります。

変形は移動、拡大・縮小、回転などを行うための機能です。たとえば、x軸方向の拡大・縮小であればsetScaleXメソッドで指定します。
移動や拡大・縮小などの変形はアフィン行列を使用した変換として表すことができます。JavaFXでも変形をアフィン行列で指定することが可能です。単純な変形であればsetScaleXメソッドのようなメソッドを使用し、複雑な変形であればアフィン行列を使うという使い分けが可能です。

最後のエフェクトはドロップシャドウやぼかしなど、ノードに対する効果のことです。エフェクトはすべて、javafx.scene.effect.Effectクラスのサブクラスとして表され、NodeクラスのsetEffectメソッドで指定します。
たとえば、ぼかしの半径が4、x軸方向のオフセットを2、y軸方向のオフセットを2、影の色を灰色とするドロップシャドウをボタンに設定するには、次のように記述します。
Button button = new Button("Drop Shadow");
Effect shadow = new DropShadow(4, 2, 2, Color.GRAY);
button.setEffect(shadow);

これらの機能の詳細については、次回以降にまた取りあげる予定です。
ここではあげた以外にも、座標であるとか、画面上でどのくらいの大きさで表示されるかとか、指定した座標がノードに含まれるかどうかなどの描画のための基本的な機能はNodeクラスで定義されています。
重要なのはこれらの機能が、コントロール、シェイプなどNodeクラスのサブクラスであれば、すべて使用可能ということです。
さて、今回はNodeクラスのサブクラスのうち、コントロールについて紹介していきます。