現状
OpenJDKとはなんぞやという人間が、JavaでGUIアプリケーションを作りたくなった。そんなに大層なものではなく、ニコニコ動画の軽量プレイヤーが作りたかっただけなのでjavafxを使うことにしたが、Scene Builderなんて初心者が使いこなせるとは思えないし、モチベーションを保つ自信がない。
最終的にOpenJDK13とJavafxを使ってGUIアプリケーションを作った。この記事ではアプリケーションを作成した環境を再構築する時のために、開発環境を用意するための手順を書き残すことにした。
IDEは今現在もっとも新しいEclipse2019-09を使う。Eclipseの公式サイトにはFull Editionをオススメすると書かれているが、HDD容量の関係でStandard Editionをインストールした。
https://mergedoc.osdn.jp/
環境
- macOS Mojave ver.10.14.6
- Open Java Development Kit 13.0.1
- JavaFX 13
OpenJDK13はbrewでインストールされていた。公式サイトにダウンロードページがあったので、そこからダウンロードしてインストールする方法もあるのだと思う。
https://jdk.java.net/13/
JavaFXは公式サイトからダウンロードしてきた気がする。Latest ReleaseのJavaFX13をダウンロードしてインストールする。
https://gluonhq.com/products/javafx/
プロジェクト内のディレクトリにjavafxをインストールするのが一般的なのだろうか…🤔
今回はプロジェクト内のディレクトリにインストールして進めていくことにした。
プロジェクト作成
新規プロジェクトを作成する。JREやレイアウト等の、他の項目は変更していない。
プロジェクト作成直後は上の画像のような状態になっている。ここにlibディレクトリを作成し、プロジェクトに必要なライブラリを入れていく。
早速プロジェクト名を右クリック、「新規」から「フォルダー」を選択。フォルダー名は「lib」にした。
ライブラリをインポート
先ほど作成したlibディレクトリに、アプリケーションに必要なライブラリをインポートする。
libを右クリックして表示されるメニューからインポートを選択する。新しくウィンドウが表示されるので、一覧の中の「一般」から「ファイル・システム」を選択して、「次へ」ボタンを押す。
javafx内のlibディレクトリを参照、選択して「完了ボタン」を押す。
なんだかlibディレクトリがごちゃごちゃしてて汚いので、javafxという名前のフォルダを作成し、そこに今インポートしたjavafxのファイルを全て入れておいた。
JavaFXライブラリのパス設定
プロジェクト名を右クリックして「プロパティ」を選択する。左の設定項目一覧から「Javaのビルド・パス」をクリックする。
「モジュールパス」が選択されている状態で、右の「ライブラリの追加」ボタンをクリックし、新しく表示される画面から「ユーザー・ライブラリー」を選択して「次へ」ボタンを押す。
右の「ユーザー・ライブラリー…」ボタンをクリックする。
ユーザーライブラリの登録画面が表示されるので右の「新規」ボタンをクリックして、登録したいユーザーライブラリの名前を入力する。わかりやすく、ここでは「javafx」とした。
先ほど追加したユーザーライブラリ「javafx」を選択し、右の「JARの追加…」ボタンをクリックする。すると、プロジェクトの構成が表示されるので、lib/javafxのjavafxライブラリ(*.jar)を全て選択して「OK」ボタンを押す。
画像ではjavafx.propertiesが含まれてしまっているが、これは選択を外す。
ユーザーライブラリを選択するウィンドウに戻ってくるので、先ほど追加したユーザーライブラリ「javafx」にチェックを入れて完了ボタンを押す。
実行/デバッグ環境設定
次に「実行/デバッグ環境」を設定していく。
「引数」タブに切り替え、VM引数に「–add-modules javafx.controls」と入力する。
次に「SWTで起動する場合は -XstartOnFirstThread引数を使用する」のチェックを外す。このチェックを外さないとMacOSではアプリケーションが起動しなかった。
「依存関係」タブを開き、クラスパス・エントリーを選択する。右の「拡張…」ボタンを押し、「ライブラリーの追加」ラジオボタンを選択して「OK」ボタンを押す。
「ユーザー・ライブラリー」を選択して「次へ」ボタンを押すと、先ほど追加した「javafx」が存在するのでそれにチェックを入れて「完了」ボタンを押す。
Hello World!
JavaFXを使ってHello Worldと表示されるアプリケーションを作成する。
プロジェクトのsrcディレクトリで右クリック、「新規」から「パッケージ」を選択する。フォルダ名は「main」とした。
次にクラスを作成する。先ほど作成したmainパッケージを右クリックして「新規」から「クラス」を選択する。名前は「App」とした。
package main; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class App extends Application { @Override public void start(Stage primaryStage) { Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(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); } }
あとは実行するだけ。
プロジェクト名を右クリックし、「実行」の「Javaアプリケーション」を選択するとタイトルにHello Worldと書かれたウィンドウが表示される。
注意したいのはjavafxで使う機能によって、実行/デバッグ環境の設定を変更する必要がある。
例えば、VM引数の–add-modules。必要なモジュールが複数ある場合は半角のカンマ(,)で区切って追記する。