JavaFXで楽々アプリケーション開発¶
書換中 |
はじめに¶
JavaFXライブラリは、GUIアプリケーションに必要となるビルディングブロックを提供しています。
しかし、ビルディングブロックは細粒度の機能が提供されるので、アプリケーションを作るには細粒度の機能を多数組み合わせていく必要があります。
お手軽に、半完成品の雛形にちょこっと手を入れるとアプリケーションが作れるプレハブ工法的なライブラリではありません。
自由度が高い分、学習する場合には難易度が上がります。
そこで、ビルディングブロックをどのように組み合わせるかを「見本」として用意し、見本に倣って組み立てることで学習の容易化をねらいます。
JavaFXのビルディングブロックと学習¶
JavaFXでGUIプログラムを作るにあたり、理解しておくべきことの例
- GUIを、Javaのコードだけで書くのか、FXMLを書くのか、CSSを書くのか、どうしたらいいかよくわからない
- FXMLってXMLを書くのは大変そう、よくわからない、面倒くさそう
- CSS使い方分からない(非Web系エンジニア)
- CSSが変だ、-fxが付いてる、(Web系エンジニア)
- クラス構成で何を作るのかよくわからない
- MVCみたいな構造あるのかな
- stageって何
- sceneって何
- シーングラフって何
- レイアウトペインでどれを使えばいいのかな
- レイアウトをきれいに配列したいんだが、margin、padding、spaceなどどう設定すればいいのかな
- SwingにあるLook and Feelのように全体の見栄えを変更することはできるかな
- 文字列リソースを外部ファイルに定義して使うにはどうしたらいいのかな
- 画面遷移の実装方法はどうすればいいのかな
- java.awtパッケージなどに同じ名前のクラスがあって、import文自動生成時に間違えることがある
- IDEの設定で、importする優先順を変えるなどできる?
方針¶
JavaFXでGUIアプリケーションを作成するときの基本構造を用意します。
基本構造とは、
- Javaソースコード、FXML、CSS、リソースバンドルといったファイル構成要素
- Model - View - Controllerといった役割による分割と連携、ここにはバインディングが含まれます
- スレッドの扱い
を含めるものとします。
JavaFXの極々シンプルなサンプルコードでは、説明対象の機能に限定したものになってしまいます。そこで、ある程度本格的な(それでも小規模な)プログラムを用意し、基本構造をちりばめ、どのように構成すればよいかを分かるようにしたいと思います。このJavaFXアプリケーション構成をパターンとして理解・把握することで、JavaFXアプリケーションを悩まずに作ることができる(楽ができる)、あとは作って動かして楽しむプログラミングに至ることを目指します。
対象とするデバイスがPC系(デスクトップPC、ノートPC、大型のタブレット)とスマートデバイス系(7インチ未満のタブレット、スマートホン)で異なっています。ここでは、PC系を想定しています。
JavaFX開発環境¶
Eclipse (Oxygen)¶
追加でプラグインを入れないと、JavaFXのプログラミングは次の点でほぼ不可です。
- javafxで始まるパッケージに含まれるクラスをコーディングすると、アクセス制限違反としてコンパイルエラー扱いされる
→ 回避策あり - javafxのクラス名の補完が機能しない(クラス名を一部入れての補完が働かず、またimport文の自動生成不可)
→ 回避策なし
e(fx)clipseプラグインを入れることで、JavaFXのプログラミングが可能となります。
- FXMLを使うプロジェクト雛形生成可(JavaFX ProjectとJavaFX Library Projectの2種類から選択)
- Scene Builder連携可(左側ペインでfxmlファイルを右クリックし、Open with SceneBuilder実行)
- パッケージ名指定可
- FXMLファイル名の指定可
- 対のコントローラークラス名指定可
- CSSファイル(application.css)が自動生成、名前指定不可
- アプリケーションクラスが自動生成、名前指定不可
- リソースバンドル・プロパティファイルはソースファイルと同じ場所に置ける
- 生成されるアプリケーションクラスは名前がMain固定になってる
- 生成されるコントローラークラスはInitializableを実装していない
- ビルドはEclipse独自機能
- 新規プロジェクトでGradleプロジェクトを作成すると、JavaFXの雛形クラス等は生成されない
※ Eclipse Oxygenでは標準でGradleビルドのプラグイン(buildshipt)が組み込まれている - パッケージを作成後、新規作成でその他からJavaFXのクラスやFXMLを作成で生成する
- 新規プロジェクトでGradleプロジェクトを作成すると、JavaFXの雛形クラス等は生成されない
IntelliJ CommunityEdition 2022.2¶
JavaFXプロジェクト生成機能があります。プロジェクト種類は[JavaFX Application]が提供され、ビルドツールに MavenまたはGradleが指定可能です。
- SceneBuilderのデザイン画面がIntelliJ IDEAに統合されている
FXMLをエディタに開くと、左下に[Text]と[Scene Builder]のタブがあり、[Scene Builder]タブをクリックするとエディタ部分がScene Builderのデザイン画面に切り替わる
左側ペインでfxmlファイルを右クリックし、[Open in SceneBuilder]で、独立したScene Builderで開く - 生成されるコントローラーはInitializableを実装していない
IntelliJ IDEA Community版のJavaFX開発
NetBeans IDE 13¶
T.B.D.
NetBeans JavaFXアプリケーションのビルドをmavenで行う
参考資料¶
プレゼン資料¶
JavaOne 資料¶
2016 SFより
- BOF2478 JavaFX Scenic View
- CON1072 The Dark and Light Side of JavaFX
- CON1379 JavaFX Tips and Tricks
- CON2483 JavaFX 9 New and Noteworthy
- CON2492 JavaFX Layouts
座標変換の適用順序あり - CON2592 Creating JavaFX Applications with mvvmFX
- HOL1634 Customize Your JavaFX Controls