【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プログラミングツールを使うことになります。