2007/03/04開始。ソフトウェア管理やDelerer SEの作者であるおにぎりくんの試行錯誤の記録です。
- [Vue.js]時計?タイムコードを表示するWebアプリ
- (2021/11/16)
- ポエム
- (2020/09/30)
- メトロノームアプリをリリース
- (2017/04/22)
- Sikulix勉強中:便利関数
- (2017/02/25)
- [JavaFX]学習メモ
- (2016/09/22)
JavaFXについて学習中です。
まとまった資料がほしいので、こちらにメモを残したいと思います…。
JavaFXアプリケーションについて
1.アプリケーションの構成とクラス
JavaFXは、Javaでアプレットや画面をもったアプリケーションを作成するためのフレームワークである。画面を表すクラス(Stage)やコントロールを表すクラス(Control)、コントロールのレイアウトを管理するクラス(XxxPane)、見た目をカスタマイズするクラス(Xxxxx)を組み合わせつつ、アプリケーション(Application)を作成する。
1.1.アプリケーション(Application)
JavaFxアプリケーションは、Applicationクラスが中心となる。(エントリポイントは通常のmainメソッドだが、通常ここではApplication.launch()メソッドを呼び出して、フレームワークに制御を委ねる。mainメソッドがなければ、launchが呼ばれたとされる・・・?暗黙の実装があるのかもしれない。)
Applicationクラスは、以下の3つのメソッドをオーバーライドする。(ライフサイクルメソッドとして、適切なタイミングで呼び出される)
initメソッド:JavaFxの初期化を行う前に呼び出される。ロジックなど、JavaFxに関係のない部分の初期化を行うことができる)
startメソッド:JavaFxの初期化後に呼び出される。画面の構築などを行うことができる。
stopメソッド:アプリケーションが終了(Platform.exit()による)する前に呼び出される。JavaFxが破棄されたあとに呼ばれるため、ロジックの終了処理を行う場所となる。
1.2.ステージ(Stage)
画面クラス。
Stageは一つのScene(https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html)を持つ(setSceneメソッドを用いる)。Sceneはシーングラフ全体を管理するためのオブジェクトであり、ドラッグ・アンド・ドロップやサイズの取得などをサポートする。シーングラフは、図形やUIコントロールを階層にしたものである。GroupクラスやRegionクラス、レイアウト関連のクラス(XxxPane)は子要素を持つことができる(これらはParentクラスのサブクラスである)。他のUIコントロールや図形は、子要素を持たない。これらが複雑に構成され、または動的に変更されるとき、表示も更新される。
ここでクラスの関連を整理しておく。
[Stage] 1-->1 [Scene] 1-->1 [Node] <-extends,has- [Parent]
1.2.1.プロパティ(Property)
Java Beanで使われているプロパティの仕組み(java.beanにあります)をベースに、拡張を加えたプロパティの仕組みがJavaFXでは使われています。
プロパティは、通常のフィールド(属性)を、一定のルールにもとづいて定義するようになっています。
ルール1:getter/setterを持つ。名前はgetXxx/setXxx。
ルール2:プロパティオブジェクトを返すメソッドを持つ。名前はxxxProperty。
プロパティオブジェクトは、プリミティブのラッパーになっていて、以下の機能を持ちます。
・変更監視(リスナーを登録して、変更時になにかしら処理できる)
・バインディング(プロパティ同士の関連を表現できる。例えば、常にAとBの和となるようなCを作れる。位置関係や金額の総和などの関係をオブジェクトとして表現できる。)(UIコントロールのプロパティ同士を連動させられる。ユーザーが入力すればプロパティも更新され、その変更をバインドした別のプロパティに反映させられる。)
バインディングオブジェクト(?)には、変更監視のリスナー登録に加えて、値が変更されたInvalidationListenerを登録できる。Bindingクラスのサブクラスを作れば、オリジナルの関係性を作ることができる。
1.3.コントロール
Scene上に配置するNodeについて。
Nodeには図形やUIコントロール、コンテナがある。
図形:四角や丸といった図形
UIコントロール:ボタンやテキストフィールド、ラベルなど。ユーザーに情報を提示したり、操作を提供したりする。
コンテナ:他のNodeを包含する。レイアウト機能を持つ(Groupは何もレイアウトを行わない)
UIコントロール
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101
コンテナ(レイアウト)
http://www.oracle.com/pls/topic/lookup?ctx=javase80&id=JFXLY
1.4.FXML
(FXMLLoaderクラスで読み込める。コントローラクラスをセットすると、FXMLのイベント(?)を受け取ることができる)
(FXMLからイベントをセットするには、コントロールにonActionといった属性を記述する。これで、fx:controlで指定されたクラスのメソッドと紐付く)
http://krr.blog.shinobi.jp/javafx/fxml%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%EF%BC%88%EF%BC%91%EF%BC%89%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9
1.5.スタイルシート
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/css_tutorial.htm#JFXUI733
1.6.ダイアログ(カスタムダイアログ)
メッセージダイアログは、Alertクラスが使える。選択ボックスやテキスト入力が必要な場合は、それぞれChoiceDialog, TextInputDialogを使える。
カスタムダイアログのためには、Stageクラスに独自のコントロールを並べたものを設定する必要がある。
2.スレッドモデル
Swingやその他のGUIフレームワーク同様、シングルスレッドモデルである。JavaFx関連の操作を行う場合は、アプリケーションスレッドと呼ばれる専用のスレッド上で行う必要がある。
(きっと、このスレッドを止めると画面の描画が進まなくなる。アプリケーションスレッドではファイルの読み書きやネットワーク通信を行わないこと。)
3.標準的なアプリケーションの例(公式チュートリアル)
------
javadoc link
* Application
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/application/Application.html
* Stage
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/stage/Stage.html
* Scene
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html
* Group
* Text
* FXMLLoader
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/fxml/FXMLLoader.html
document link
* Overview
https://docs.oracle.com/javase/jp/8/javafx/get-started-tutorial/jfx-overview.htm
* Properties
https://docs.oracle.com/javase/jp/8/javafx/properties-binding-tutorial/binding.htm
http://itpro.nikkeibp.co.jp/article/COLUMN/20121219/445461/?P=2
* Scene Graph
https://docs.oracle.com/javase/jp/8/javafx/scene-graph-tutorial/scenegraph.htm#JFXSG107
* UI Controls, Layouts, CSS
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101
* Containers
* Screen Transition http://javafx-trick.appspot.com/article/110001/110009/80051.html
* Dialogs http://krr.blog.shinobi.jp/javafx/javafx%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0
* Samples http://www.oracle.com/technetwork/java/javase/overview/javafx-samples-2158687.html
まとまった資料がほしいので、こちらにメモを残したいと思います…。
JavaFXアプリケーションについて
1.アプリケーションの構成とクラス
JavaFXは、Javaでアプレットや画面をもったアプリケーションを作成するためのフレームワークである。画面を表すクラス(Stage)やコントロールを表すクラス(Control)、コントロールのレイアウトを管理するクラス(XxxPane)、見た目をカスタマイズするクラス(Xxxxx)を組み合わせつつ、アプリケーション(Application)を作成する。
1.1.アプリケーション(Application)
JavaFxアプリケーションは、Applicationクラスが中心となる。(エントリポイントは通常のmainメソッドだが、通常ここではApplication.launch()メソッドを呼び出して、フレームワークに制御を委ねる。mainメソッドがなければ、launchが呼ばれたとされる・・・?暗黙の実装があるのかもしれない。)
Applicationクラスは、以下の3つのメソッドをオーバーライドする。(ライフサイクルメソッドとして、適切なタイミングで呼び出される)
initメソッド:JavaFxの初期化を行う前に呼び出される。ロジックなど、JavaFxに関係のない部分の初期化を行うことができる)
startメソッド:JavaFxの初期化後に呼び出される。画面の構築などを行うことができる。
stopメソッド:アプリケーションが終了(Platform.exit()による)する前に呼び出される。JavaFxが破棄されたあとに呼ばれるため、ロジックの終了処理を行う場所となる。
1.2.ステージ(Stage)
画面クラス。
Stageは一つのScene(https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html)を持つ(setSceneメソッドを用いる)。Sceneはシーングラフ全体を管理するためのオブジェクトであり、ドラッグ・アンド・ドロップやサイズの取得などをサポートする。シーングラフは、図形やUIコントロールを階層にしたものである。GroupクラスやRegionクラス、レイアウト関連のクラス(XxxPane)は子要素を持つことができる(これらはParentクラスのサブクラスである)。他のUIコントロールや図形は、子要素を持たない。これらが複雑に構成され、または動的に変更されるとき、表示も更新される。
ここでクラスの関連を整理しておく。
[Stage] 1-->1 [Scene] 1-->1 [Node] <-extends,has- [Parent]
1.2.1.プロパティ(Property)
Java Beanで使われているプロパティの仕組み(java.beanにあります)をベースに、拡張を加えたプロパティの仕組みがJavaFXでは使われています。
プロパティは、通常のフィールド(属性)を、一定のルールにもとづいて定義するようになっています。
ルール1:getter/setterを持つ。名前はgetXxx/setXxx。
ルール2:プロパティオブジェクトを返すメソッドを持つ。名前はxxxProperty。
プロパティオブジェクトは、プリミティブのラッパーになっていて、以下の機能を持ちます。
・変更監視(リスナーを登録して、変更時になにかしら処理できる)
・バインディング(プロパティ同士の関連を表現できる。例えば、常にAとBの和となるようなCを作れる。位置関係や金額の総和などの関係をオブジェクトとして表現できる。)(UIコントロールのプロパティ同士を連動させられる。ユーザーが入力すればプロパティも更新され、その変更をバインドした別のプロパティに反映させられる。)
バインディングオブジェクト(?)には、変更監視のリスナー登録に加えて、値が変更されたInvalidationListenerを登録できる。Bindingクラスのサブクラスを作れば、オリジナルの関係性を作ることができる。
1.3.コントロール
Scene上に配置するNodeについて。
Nodeには図形やUIコントロール、コンテナがある。
図形:四角や丸といった図形
UIコントロール:ボタンやテキストフィールド、ラベルなど。ユーザーに情報を提示したり、操作を提供したりする。
コンテナ:他のNodeを包含する。レイアウト機能を持つ(Groupは何もレイアウトを行わない)
UIコントロール
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101
コンテナ(レイアウト)
http://www.oracle.com/pls/topic/lookup?ctx=javase80&id=JFXLY
1.4.FXML
(FXMLLoaderクラスで読み込める。コントローラクラスをセットすると、FXMLのイベント(?)を受け取ることができる)
(FXMLからイベントをセットするには、コントロールにonActionといった属性を記述する。これで、fx:controlで指定されたクラスのメソッドと紐付く)
http://krr.blog.shinobi.jp/javafx/fxml%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%EF%BC%88%EF%BC%91%EF%BC%89%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9
1.5.スタイルシート
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/css_tutorial.htm#JFXUI733
1.6.ダイアログ(カスタムダイアログ)
メッセージダイアログは、Alertクラスが使える。選択ボックスやテキスト入力が必要な場合は、それぞれChoiceDialog, TextInputDialogを使える。
カスタムダイアログのためには、Stageクラスに独自のコントロールを並べたものを設定する必要がある。
2.スレッドモデル
Swingやその他のGUIフレームワーク同様、シングルスレッドモデルである。JavaFx関連の操作を行う場合は、アプリケーションスレッドと呼ばれる専用のスレッド上で行う必要がある。
(きっと、このスレッドを止めると画面の描画が進まなくなる。アプリケーションスレッドではファイルの読み書きやネットワーク通信を行わないこと。)
3.標準的なアプリケーションの例(公式チュートリアル)
------
javadoc link
* Application
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/application/Application.html
* Stage
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/stage/Stage.html
* Scene
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/Scene.html
* Group
* Text
* FXMLLoader
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/fxml/FXMLLoader.html
document link
* Overview
https://docs.oracle.com/javase/jp/8/javafx/get-started-tutorial/jfx-overview.htm
* Properties
https://docs.oracle.com/javase/jp/8/javafx/properties-binding-tutorial/binding.htm
http://itpro.nikkeibp.co.jp/article/COLUMN/20121219/445461/?P=2
* Scene Graph
https://docs.oracle.com/javase/jp/8/javafx/scene-graph-tutorial/scenegraph.htm#JFXSG107
* UI Controls, Layouts, CSS
https://docs.oracle.com/javase/jp/8/javafx/user-interface-tutorial/ui_components.htm#JFXUI101
* Containers
* Screen Transition http://javafx-trick.appspot.com/article/110001/110009/80051.html
* Dialogs http://krr.blog.shinobi.jp/javafx/javafx%20%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0
* Samples http://www.oracle.com/technetwork/java/javase/overview/javafx-samples-2158687.html
PR
スポンサード・リンク
この記事にコメントする
フリーソフト指向::開発日記 by LapisCactus