S-JIS[2012-02-21] 変更履歴

JavaFX2 最初のサンプル

skrbさんのJavaFX で Hello, World!を参考に、JavaFX2の簡単なサンプルを書いてみた。


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


JavaFX目次へ戻る / Java目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま