Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

【JavaFx入門】001.最も単純なJavaFxプログラム

最も単純だと思われるJavaFxプログラム(ウィンドウを表示するだけ)を書いてみたいと思います。

package Blog;

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

public class Sample extends Application {
	
	@Override
	public void start(Stage stg) {
		stg.show();
	}
	
	public static void main(String[] args) {
		launch(args);
	}

}


StringBuilderやFXMLで作成すると多少違ってきますが、それらを使わない場合、この書き方がすべてのJavaFxプログラムの基本になります。

では次に、テキストが書かれたラベル(テキストや画像を貼り付けられるエリアだと思ってください)を表示するプログラムを書いてみたいと思います。

package Blog;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

public class Sample extends Application {

	@Override
	public void start(Stage stg) {
		//文字列入りラベルを定義
		Label label = new Label("Hello JavaFx!");

		//レイアウトコンテナを定義
		Group group = new Group();

		//レイアウトコンテナgroupの中にラベルを入れる
		group.getChildren().addAll(label);

		//シーンを作成し、レイアウトコンテナを追加
		Scene scene = new Scene(group);
		
		//シーンをステージに追加
		stg.setScene(scene);
		
		//ウィンドウを可視化する
		stg.show();
	}

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


今回は何もしませんでしたが、ラベルを定義したあとに、label.メソッド名(引数)と記述することで、ラベルにさまざまな変更を加えられます。具体的には、

・label.setTextFill(Color.WHITE); 文字色を白に
・label.setFont(Font.font("フォント名",フォントサイズ)); フォントとフォントサイズの変更

などがあります。



レイアウトコンテナ(オブジェクトを自動で配置してくれる枠のようなもの)については、今回はGroupを使用しました。Groupは自動配置をいっさい行わないレイアウトボックスです。具体的には、自らに属するすべてのオブジェクトを座標(0,0)に配置します。

オブジェクトの配置を手動で決めたいときは、このレイアウトボックスを使うとよいでしょう。

自動配置したいときは、縦に並べて配置してくれる「VBox」や、横に並べて配置してくれる「HBox」などを使います。



シーン(Scene)について。自分もまだあまり理解できていないのですが、JavaFxの構造は、根本部分から順に、

・Stage → Scene → SceneGraph

となっています。

Stageがウィンドウそのもの、Sceneがウィンドウ内部の基礎となるもの、SceneGraphがウィンドウ内部に実際に配置するオブジェクト、ということみたいです。Sceneにレイアウトコンテナ(SceneGraph)を1つ貼り付けて、その中にオブジェクト(SceneGraph)を入れていく、というのが基本的な使い方になります。

SceneGraphは入れ子構造になっていて、たとえば、「2つのラベルを格納したVBox」と「2つの画像を格納したHBox」を「VBox」に入れて表示するというようなとき、SceneGraphは

・VBox
 ・VBox
  ・label 01
  ・label 02
 ・HBox
  ・image 01
  ・image 02

のような構造になります。

これを上手く利用することで複雑なレイアウトのアプリケーションを作成することができますが、エディタ上でのレイアウト作成には限界があり、基本的にはSceneBuilderなどのGUIプログラミングツールを使うことになります。