SceneBuilder(FXML)とJavaのバインド
MementoWeaver開発記(2)
開発環境もできたので早速JavaFXをつかって画面周りを書き始めてみる。
今回の先達は、id:funakkyさんのSceneBuilderとEclipseでJavaFX2.1のサンプル作成 - funakkyの日記を参考とさせていただく。
(先達に感謝します。)
MWは現時点の想定で4画面程度の小規模アプリだが、大まかに方針を考えておく。
画面遷移はGitHubに載せた。
パッケージングの方針
- Javaプロジェクト名:MementoWeaver
- 基底のパッケージ:nobugs.nolife.mw
- 画面周りのパッケージ:nobugs.nolife.mw.ui
作成画面(FXMLで作成する)
メインクラスの開発
まずはもっともシンプルなメニュー画面から着手する。
アプリ起動のクラスはとりあえず、MainMenuとする。ここは先達の記事を参考にほぼ丸写しで済む。
なお、次のステップで画面遷移(シーン切り替え)を実装する際にクラス構造は見直す。*1
package nobugs.nolife.mw.ui; import javafx.application.Application; import javafx.stage.Stage; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; public class MainMenu extends Application { @Override public void start(Stage stage) throws Exception { // 画面のタイトルを設定 stage.setTitle("Memento Weaver メインメニュー"); // FXMLファイルをロード Parent root = FXMLLoader.load(getClass().getResource("MainMenu.fxml")); // 表示内容を設定 Scene scene = new Scene(root); stage.setScene(scene); // 画面表示 stage.show(); } public static void main(String[] args) { launch(args); } }
コントロールクラス
コントロールクラスは、FXMLファイル(画面定義)とJavaの世界を繋ぐクラスとなるので、画面名称+Controllerの命名とする。
なお、メインメニューに配置するコントロールはButtonのみなので、インスタンス変数は持たずにイベントハンドラのみを定義する。
イベントハンドラの名称は後ほどSceneBuilderから指定されることになる。
また、このクラスは所謂ところのPOJO*2で、FXML周りのインスタンス変数やメソッドには@FXMLアノテーションを付ける。
package nobugs.nolife.mw.ui; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class MainMenuController { // 入力フィールドに対応するインスタンスを保持する変数 // 対応付けはFXMLファイルで定義する // publicフィールドの場合は@FXMLの記述は不要 // イベントハンドラ @FXML protected void install(ActionEvent e) { System.out.println(e); } @FXML protected void generate(ActionEvent e) {} // TODO not implemented yet @FXML protected void modify(ActionEvent e) {} // TODO not implemented yet @FXML protected void exit(ActionEvent e) {} // TODO not implemented yet }
FXMLファイル
ここからEclipseを離れてSceneBuilderの世界に。
GUIビルダとして良く出来ていると思うし、使い方についても特に難しいところは無いので、特に注意すべき点も無いように思う。
ただ、先達のページの解説と一部違う箇所があったので、そこだけ追記する。
(このページでは、Java SE 7u13(JavaFX:2.5.5)を使っているのでその関係か?Scene Builderのバージョンは一緒のようなんだけどなぁ。)
FXMLファイルとコントローラクラスを関連付けるための"コントロール・クラス"は、先達のページではScreen Builder画面右ペインの[Document]にあるとの記載だったが、今のバージョンではAnchorPane(ルート要素?)を選択した際の[コード]セクションにある様子*3。
それ以外については特に注意すべき点も無いように思う。
画面遷移などについてはまた次回。