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のスタイルの仕様を確認する必要がある。
(しかもコントロール(シーン)毎に使えるスタイルが異なるので、個別に確認しなければならない)