skrbさんのJavaFX で Hello, World!を参考に、JavaFX2の簡単なサンプルを書いてみた。
クライアントGUIアプリケーションを作る場合、Applicationクラスを継承し、start()メソッドをオーバーライドする。
そして、main()からstaticメソッドのlaunch()を呼んでいる。
すなわち、launch()からstart()が呼ばれる。
(launch()にクラスを渡さなかった場合、launch()を呼び出したクラスが指定されたものとして扱われる)
import javafx.application.Application; import javafx.stage.Stage;
public class Sample extends Application { public static void main(String[] args) { launch(args); // launch(Sample.class, args); } @Override public void start(Stage stage) throws Exception { 〜 } }
※jfxrt.jarをビルドパス(クラスパス)に追加しておく必要がある。
ウィンドウ(フレーム)を出し、文字列を表示する例。
普通版 | Builder版 |
---|---|
import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.Pane; |
import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.LabelBuilder; import javafx.scene.layout.Pane; import javafx.scene.layout.PaneBuilder; |
@Override public void start(Stage stage) throws Exception { stage.setTitle("sample title"); |
|
Pane root = new Pane(); |
Pane root = PaneBuilder.create() .build(); |
Scene scene = new Scene(root, 256, 212); //ウィンドウサイズ |
|
Label label = new Label("Hello, World!"); |
Label label = LabelBuilder.create() .text("Hello, World!") .build(); |
root.getChildren().add(label); stage.setScene(scene); stage.show(); } |
JavaFX2では、Label等のコントロール(シーン)のクラスを直接使う方法の他に、Builderを使う方法がある。
Builderを使うと、メソッドチェーンのような形でプロパティーを指定できる。
Builderを使う場合は、Builder.
create()でビルダーのインスタンスを生成し、最後にbuild()でシーンを作る。
↓ラベルの左上の座標を(16, 32)
の位置にする例。
普通版 | Builder版 |
---|---|
import javafx.geometry.Pos; |
|
Label label = new Label(); label.setText("Hello, World!"); label.setLayoutX(16); label.setLayoutY(32); label.setAlignment(Pos.TOP_LEFT); |
Label label = LabelBuilder.create() .text("Hello, World!") .layoutX(16) .layoutY(32) .alignment(Pos.TOP_LEFT) .build(); |
※layoutX・layoutYで座標を指定する場合、貼り付ける先がPaneクラスである必要がある。(StackPaneとかだと指定した座標は無視される)
JavaFX2では、シーンにスタイル(HTMLのCSSがベース)を適用することが出来る。
これを使って背景色やラベルのフォントサイズ・文字色を変える例。
普通版 | Builder版 |
---|---|
import javafx.scene.layout.Pane; |
import javafx.scene.layout.Pane; import javafx.scene.layout.PaneBuilder; |
Pane root = new Pane(); root.setStyle("-fx-background-color: blue"); |
Pane root = PaneBuilder.create() .style("-fx-background-color: blue") .build(); |
Label label = new Label(); label.setText("Hello, World!"); label.setLayoutX(16); label.setLayoutY(32); label.setAlignment(Pos.TOP_LEFT); label.setStyle("-fx-font-size: 24; -fx-text-fill: white"); |
Label label = LabelBuilder.create() .text("Hello, World!") .layoutX(16) .layoutY(32) .alignment(Pos.TOP_LEFT) .style("-fx-font-size: 24; -fx-text-fill: white") .build(); |
JavaFX2用のスタイルは、接頭辞として「-fx」が付いている。
HTMLのCSSと全く同じではないので、JavaFX2のスタイルの仕様を確認する必要がある。
(しかもコントロール(シーン)毎に使えるスタイルが異なるので、個別に確認しなければならない)