torutkのブログ

ソフトウェア・エンジニアのブログ

IntelliJ IDEAでJavaFXアプリケーションのProject Template作成

動機

IntelliJ IDEAでJavaFXアプリケーションを作成する際に、FXMLファイルで画面レイアウト定義、CSSファイルで見栄え定義、プロパティファイルでリソース定義をする場合に用意するファイルと毎度のコードを生成するプロジェクトテンプレートを作成します。

作成環境は次です。

OS Windows 10 Home 64bit
IntelliJ IDEA Community 2019.1
SDK Liberica 12

ここで、JavaFXアプリケーションのビルド・実行に使用するSDKJDK)は、BellSoft社が無償提供するOpenJDK 12にJavaFXを同梱したLiberica JDK 12です。
https://bell-sw.com/pages/java-12/

プロジェクトテンプレートの作成

IntellIJ IDEAには、作ったプロジェクトをテンプレートして保存する機能があります。
[Tools]メニュー > [Save Project as Template]

そこで、FXMLファイル、CSSファイル、プロパティファイルを使用するJavaFXアプリケーションの最小構成をプロジェクトとして作成し、この機能でテンプレート化してみます。

最小構成のプロジェクトを作成しテンプレート保存

[Files]メニュー > [New] > [Project] で「New Project」画面を開き、左側ペインで[Java]を選択、右側ペイン上の[Project SDK]欄ではJavaFXを同梱するJDK(今回はLiberica JDK 12)を指定します。
[Project name]には、samplefx と入れてみました。

続いて、パッケージを1つ作成します。パッケージ名は、テンプレートからプロジェクトを作る際に指定したものに置き換えられるので、ここでは適当な名前(com.torutk.samplefx)を付けておきます。

そのパッケージの下に、javafx.application.Applicationを継承したメインクラス、コントローラークラス、FXMLファイル、CSSファイル、プロパティファイルを作っていきます。

f:id:torutk:20190409231332p:plain:w240
IntelliJ のプロジェクトテンプレート用JavaFXアプリケーションプロジェクトのファイル構成

ビルド・実行ができることを確認し、プロジェクトテンプレートを作成します。
[Tools]メニュー > [Save Project as Template]を実行し、「Save Project As Template」画面でテンプレートの名前と説明を入力します。

f:id:torutk:20190409235316p:plain:w480
Save Project As Templateダイアログに名前と説明を記載

作成されたプロジェクトテンプレートはzipアーカイブファイルで、ユーザーディレクトリの下に生成されます。

C:\Users\<ユーザー名>\.IdeaIC<バージョン>\config\projectTemplates\JavaFX Sample Application.zip

テンプレートからプロジェクトを作成

先に作成したプロジェクトテンプレートからプロジェクトを生成します。

[File]メニュー > [New] > [Project]で「New Project」画面を開きます。左側ペインにある[User-defined]を選択すると右側ペインにユーザー定義のプロジェクトテンプレートがリストされます。この中に先ほど作成した[JavaFX Sample Application]があるのでこれを選択します。

f:id:torutk:20190409235945p:plain:w480
作成したテンプレートをNew Projectで指定

プロジェクト名とパッケージ名を指定します。

f:id:torutk:20190410075044p:plain
New Projectでプロジェクト名とパッケージ名指定

指定したプロジェクト名に合わせてJavaモジュール名を変更するか問うダイアログが表示されます。チェックを付けます。

f:id:torutk:20190410080107p:plain
New Projectでモジュール名変更

次のファイル構成で新しいプロジェクトが生成されます。

f:id:torutk:20190410080347p:plain
生成されたファイル群

注意点

Project Templateの雛形とするプロジェクトを作成するときに、プロジェクト名とパッケージ名を同じにすると、うまく動かないコードが生成されてしまいます。

例)プロジェクト名をsamplefxとし、パッケージ名をsampleとしたプロジェクトテンプレートを作成し、これを雛形とするアプリケーションプロジェクトを作成、パッケージ名にcom.torutk.helloと指定したところ、プロジェクトが正常に作られませんでした。

IntelliJ IDEAのモジュール定義ファイル samplefx.iml に対し、IntelliJ IDEAのプロジェクトファイルmodules.xmlの中で参照するパス名がsamplefx.imlではなく、com.torutk.hellofx.imlと"sample"の部分が置き換えられてしまいました。