JavaFX の始め方(Gradle 編)

f:id:Naotsugu:20200307001228p:plain


はじめに

Java 11 からは、JavaFX が同梱されなくなったため、別途 OpenJFX を導入する必要があります。

しかし、Maven や Gradle 向けにプラグインが提供されているため、導入はとても簡単です。


プロジェクトの作成

Gradle でプロジェクトを作成します。

$ mkdir example-javafx
$ cd example-javafx
$ gradle init --type java-application --test-framework junit


OpenJFX プラグインの導入

build.gradle を以下のように編集します。

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

repositories {
    jcenter()
}

dependencies {
    testImplementation 'junit:junit:4.12'
}

application {
    mainClassName = 'example.javafx.App'
}

javafx {
    version = '11.0.2'
    modules = [ 'javafx.controls' ]
}

プラグイン org.openjfx.javafxplugin を指定しています。

利用するバージョンとモジュールを javafx の中で指定します。

LTS(Long Term Support) の 11 ではなく、JavaFx 13 を使う場合は以下のように指定します。

javafx {
    version = "13"
    modules = [ 'javafx.controls' ]
}

モジュールは javafx.controls を指定すれば、合わせて javafx-basejavafx-graphics が依存として入ります。


アプリケーションの実行

簡単なものとして以下を作成します。

package example.javafx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) {
        Label label = new Label("Hello, JavaFX");
        Scene scene = new Scene(new StackPane(label), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

実行しましょう。

$ gradlew run

f:id:Naotsugu:20200306233535p:plain

実行できました。


モジュール

モジュール 説明
javafx.base JavaFX UIツールキットのベースAPI。バインディング、プロパティ、コレクション、イベントのAPIを含む
javafx.controls JavaFX UIツールキットで使用可能なUIコントロール、チャート、およびスキン
javafx.fxml JavaFX UIツールキットのための FXML API
javafx.graphics JavaFX UIツールキット(アプリケーションのライフサイクル、シェイプ、変換、キャンバス、入力、ペイント、イメージ処理、エフェクトなど)のコア・シーン・グラフAPI、およびアニメーション、CSS、並行処理、ジオメトリ、印刷、およびウィンドウ処理用のAPI
javafx.media MediaView や MediaPlayer を含む JavaFX UIツールキットの一部として、メディアおよびオーディオコンテンツの再生用のAPI
javafx.swing SwingNode (JavaFXアプリケーション内にSwingを埋め込む)およびJFXPanel (JavaFXをSwingアプリケーションの中に埋め込む)を含む、JavaFX UIツールキットに含まれているJavaFX / Swing相互運用機能サポート用のAPI
javafx.web JavaFX UIツールキットに含まれるWebView機能用のAPI

モジュールグラフは以下のようになります。

f:id:Naotsugu:20200307001131p:plain