はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

JavaFX でHello World(基本構造)

JavaFXHello World(基本構造)

JavaFX を試してみる機会があったので、 基本構造を メモ。

環境

JavaFX とは

Java8 でも標準に使えるGUIライブラリ。 AWT/Swing とは別物。

AWT/Swing からJavaFX への切り替えが推奨されている(JavaFXに関してよくある質問)ので、 これから勉強する際はJavaFXでよさげ。

Awt/Swingとは違うので、基本は import javafx.~~ のように読み込んで使用する。

基本構造

以下のコードが基本構造である。実行すると何もしないアプリケーションが立ち上がる。

メインクラスは、JavaFXアプリケーションの拡張元となる Applicationクラスを継承する。

main メソッドで、Applicationクラスの lanch メソッドが呼ばれる。 このlanchメソッドでJavaFX アプリケーションが立ち上がる。

lanchメソッドが呼ばれると startメソッドが呼ばれる。 処理をstartメソッドに記述し、実装する必要がある。

参考:Application (JavaFX 8)


import javafx.application.Application;
import javafx.stage.Stage;

public class JavaFXApplication extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

JavaFXアプリケーション(何もしない)

Stage

「Stage」は、「トップレベルコンテナ」と呼ばれるもの。 GUI組み込みの土台となるコンテナ。 このStageを使ってウインドウを構築するのが基本。 アプリケーション1つにStage1つを持つことになる。Stage がウィンドウそのものと捉えていい。

showメソッドで、 ウィンドウが表示され、Stageに追加したコンポーネント(Node)が描画される。

参考:Stage (JavaFX 8)

Scene

実際には、Stage に直接パーツを追加するのでなく、「Scene」を追加する。 「Scene」は、Stage に組み込まれる見えないコンテナ。 ウインドウ(Stage) の中に表示される内容を構築するのがScene。 Scene に組み込まれたものをStage に、はめ込んで表示する。

以下のように、Scene の部分でウィンドウのサイズ(width, height) が決まる。また、背景色の指定もできる。


Scene primaryScene = new Scene([Pane], width, height);
primaryStage.add(primaryScene);

参考:Scene (JavaFX 8)

Pane

「Pane」が、実際にボタンなどのコンポーネント(Node)を組み込む土台となるコンテナになる。 Scene には、Pane を1つ組み込めるようになっている。 Paneは、いくつかの種類があり、 Pane内にどのようにコンポーネントを組み込む(配置する)かそのレイアウト方式の違いがある。

例えば、「BoderPane」では、 setTop, setRight, setLeft, setBottom, setCenter で5つの場所に配置可能。 また、「HBox」では、コンポーネントを水平に配置可能になる。

Pane は入れ子にすることもでき、 HBoxで水平に配置したものをBorderPane の上部にsetTopで配置することもできる。 入れ子が多すぎるとわかりづらいので、fxml を使って、配置・レイアウトするのが望ましいと思われる。

参考:Pane (JavaFX 8)

Hello World

以下は、 NetBeansJavaFXプロジェクトを立ち上げ時の テンプレート(Hello World) のコードである。

StackPane にボタンを追加し、そのPane をScene に追加し、 そのScene をpraimaryStage に追加している。

ボタン(Button) をクリックすると、 標準出力で"Hello World" が出力される。

JavaFX でHelloWorld (NetBeans のテンプレート)

HelloWorldアプリケーションのウィンドウ画面