SceneBuilderで独自クラスを使うには

提供: tknotebook
2016年6月21日 (火) 14:14時点におけるNakamuri (トーク | 投稿記録)による版

移動: 案内検索

メインページ>コンピュータの部屋#JavaFX>JavaFX Tips


いずれ改善されるとは思いますが、現在この記事に執筆時点のSceneBuilder(8.2.0)では JDK付属のクラス以外を扱えません。つまりクラスパスを拡張できません。

かつては クラスパスを指定する方法があったらしいのですが、現在では不可能です。

何が問題かというと、例えば ChoiceBox や ComboBox レベルの比較的単純なコントロールでさえ、 少々凝ったことをしようとすると、独自のリストセルクラス、独自のセルファクトリクラスやコンバータークラスが 必要になります。

ChoiceBox や ComboBoxのリスト項目として、String型だけではなく、独自の Enum型などの独自クラスのオブジェクトを セットできるようになっています。

こうしたことはFXMLで記述することは可能なのですが、FXML内に JDK以外のクラスが混じると、 SceneBuilder で FXMLファイルが開けなくなってしまいます。これは大変困ります。

この記事では、この問題の対処方法を記述します。

カスタムコンポーネントの追加機能

実は SceneBuilder には利用者が独自に開発した JAR や FXML を登録する機能があります。SceneBuilder の左上の部分にカスタムコンポーネントを表示するエリアがあります。

SceneBuilder Library.png

ここに JAR を登録するには数のメニューから、JAR/FXML Manager を使います。 メニューを選ぶとファイルの選択ダイアログが現れ、JARを登録することができます。

SceneBuilder Jar FXML MANAGER.png

ここで登録した JAR は

C:\Users\<ユーザ名>\AppData\Roaming\Scene Builder\Library

にコピーされます。つまりここに SceneBuilder で使いたいクラスが入った JAR を置けばよいわけです。

対処方法

ここまでわかれば後は簡単です。

まず、JavaFX のアプリをビルドする際、Jarを作るようにします。IntelliJ IDEA では Artifact を追加すればよいですし、Gradleベースのプロジェクトなら最初からJarは作られるようになっています。

次に、 C:\Users\<ユーザ名>\AppData\Roaming\Scene Builder\Library にその Jar へのシンボリックリンクを置くのです。 作成は mklink コマンドがお手軽です。

シンボリックリンクの作成例

cd C:\Users\<ユーザ名>\AppData\Roaming\Scene Builder\Library
mklink Effects.jar C:\javafx_svn_projects\Effects\out\artifacts\Effects_jar\Effects.jar

これで、アプリ独自クラスを含む FXMLファイルが SceneBuilder で開けるようになります。