JavaFXについてのまとめ②
JavaFXを使いWebアプリケーションを作る
まずはベースとなるものを作っておきます。
- メニュー の ファイル > 新規プロジェクト をクリック
- カテゴリ の JavaFX > JavaFXアプリケーションを選択。 [次へ]
- プロジェクト名とプロジェクトの場所(保存先)を選択。 [終了]
プロジェクト名は適当に。例ではJavaFXAppにしました。
プロジェクトの場所も適当で大丈夫です。
JavaFXではラムダ式をよく使うそうなので対応してる1.8(Java8)以上が推奨かな?
サンプルアプリケーションの実行
- 左の赤線で囲ったプロジェクトタブをクリック
- JavaFXApp > ソースパッケージ > javafxapp > JavaFXapp.java を
ダブルクリックで開きます。
この時点でJavaFXのサンプルコードが書かれているので実行で起動出来ます。
- 上の青線で囲った実行ボタンをクリックします。
- コンパイルが始まりサンプルアプリケーションのウィンドウが表示されます。
このアプリケーションが出てくればコンパイル成功です。
コードの説明
インポート文を抜いたコードがこちらになります。
public class JavaFXApp extends Application { @Override public void start(Stage primaryStage) { Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction((ActionEvent event) -> { System.out.println("Hello World!"); }); StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
順番に説明します。
public class JavaFXApp extends Application { }
このクラスはApplicationを継承していますね。
これによりJavaFXアプリケーションとして認識されます。
public static void main(String[] args) { launch(args); }
メインメソッドは継承したApplicationクラスのlaunchメソッドを
呼び出びだしてApplicationのインスタンス作成。
@Override public void start(Stage primaryStage) { ~~~~処理~~~~ }
この中にボタンやらテキストやらをnewして位置決めして表示の処理を書きます。
Button btn = new Button(); btn.setText("Say 'Hello World'");
Buttonクラスでbtnオブジェクトを作成
btn.setText("~ボタンの表示文字~")
ラムダ式と従来のコードの書き方の比較
従来の書き方
btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); ラムダ式の書き方 >|java| btn.setOnAction((ActionEvent event) -> { System.out.println("Hello World!"); });
ラムダ式への変換の仕方
コード行数表示が電球マークになっているので、それをクリック。
ラムダ式を使用をクリックすれば、自動でラムダ式に変換になります。
どうですか?ラムダ式を使えば簡潔に書けますね!
ラムダ式についてはぐぐれば出るのでそちらを参考にしてください。
btn.setOnActionメソッドでbtnオブジェクトがクリックされた時に行う
処理を書きます。
StackPane root = new StackPane();
root.getChildren().add(btn);
StackPaneという種類のPaneをrootというオブジェクトで作ります。
root.getChildren().add(btn)でbtnオブジェクトがPaneの子要素になりました。
Scene scene = new Scene(root, 300, 250);
Sceneにrootオブジェクトと幅と高さを与えます。
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
primaryStageは最初に(Stage primaryStage)でもらった引数ですね。
StageクラスのsetTitleでウィンドウのタイトルをHello Worldにします。
StageクラスのsetSceneでStageクラスにSceneを入れます。
最後にStageクラスのshow()でウィンドウを表示させています。
つまりこの様に、Stageの中にSceneがあり、Sceneの中にPaneがあり
Paneの中にボタンとかラベルが配置されています。
しかし、このような書き方だと直感的にわかりにくいものになってしまうので
メインクラス と FXML(要素の配置) と コントロール(ボタンなどの処理)
を分けて書きます。
JavaFXについてのまとめ①
http://jocoroo.hatenablog.com/entry/2014/11/20/204906
JavaFXについてのまとめ②
http://jocoroo.hatenablog.com/entry/2014/12/07/183013
JavaFXについてのまとめ③
http://jocoroo.hatenablog.com/entry/2014/12/08/020258
JavaFXについてのまとめ④
http://jocoroo.hatenablog.com/entry/2014/12/08/032056