【JavaFX】ウィンドウ表示

本稿はJavaFXでウィンドウ表示する方法を紹介します。

ウィンドウ表示とよく利用しそうなメソッド

JavaFXアプリケーションでウィンドウを表示するには、まず対象クラスにApplicationクラスを継承させ、オーバーライドしたstartメソッドの引数である、Stageオブジェクトのshowメソッドを呼び出します。

ついでに、ゲーム制作で使用したくなるであろう機能の、ウィンドウサイズ、タイトル指定、リサイズ無効化、ウィンドウアイコン、フルスクリーンモードなどの設定方法も見ておきましょう。

今回使用したウィンドウアイコンはこれ。

test.png

画像はソースと同じ個所に配置しました。Eclipseの場合はプロジェクトルートに配置してください。

それではサンプルをご覧ください。

import java.io.File;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

public class Test extends Application{

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

	@Override
	public void start(Stage primaryStage) {
		//シーンにはめ込むパネル
		Group p = new Group();

		//シーンをセット(ウィンドウサイズに影響を与えます)
		Scene scene = new Scene(p, 400, 300);
		primaryStage.setScene(scene);

		//ウィンドウタイトル
		primaryStage.setTitle("FXTest");

		//ウィンドウサイズ変更の無効化
		primaryStage.setResizable(false);

		//アイコンの設定
		Image img = new Image(new File("./test.png").toURI().toString());
		primaryStage.getIcons().add(img);

		//フルスクリーンモードのオン、オフ
		//フルスクリーンオンの時はescキーで解除できます
		primaryStage.setFullScreen(false);

		//ウィンドウの表示
		primaryStage.show();
	}
}
実行結果

タスクバー

JavaFXでのウィンドウクラスはStageクラスに当たります。JavaFXアプリケーションでは、すでにこのオブジェクトは作成されており、自分でインスタンス化する必要はありません。SwingでいうところのJFrameにですね。

このStageオブジェクトに対してSceneというパネルを挿入し、このシーン上にさらにParentクラスを継承したオブジェクトを挿入します。今回はGroupを挿入しました。

Groupに複数のNodeオブジェクトを挿入することで特定の図形を表示したりできます。

ウィンドウタイトルの指定

StageクラスのsetTitle(タイトルにしたい文字列)メソッドを使用します。

primaryStage.setTitle("FXTest");

ウィンドウサイズの指定

StageクラスのサイズはSceneオブジェクトのサイズに合わせられます。

Scene scene = new Scene(p, 400, 300);

ウィンドウサイズ変更無効化

StageクラスのsetResizable(有効か無効か)メソッドを利用します。

primaryStage.setResizable(false);

アイコンの指定

StageクラスのgetIconsメソッドでリストを取得し、Imageオブジェクトを追加するだけで設定できます。

Imageクラスのコンストラクタには、URI形式のパス文字列を指定します。

Image img = new Image(new File("./test.png").toURI().toString());
primaryStage.getIcons().add(img);

フルスクリーンの指定

StageクラスのsetFullScreen(有効か無効か)メソッドで指定できます。

途中でフルスクリーンの無効化をしたい場合はESCキーで解除できるようです。

primaryStage.setFullScreen(false);

ちなみにメインメソッドはなくても起動できるようです。

JavaJavaFX

Posted by nompor