Help us understand the problem. What is going on with this article?

JavaFXでHelloFX

はじめに

はじめまして。
この記事はITRC Advent Calendar 2019の5日目の記事になります。
今回はJavaFXでHelloWorldの様に「Hello,JavaFX」を表示させるところまでやりたいと思います。

環境

  • ArchLinux
  • Java11
  • Eclipse

HelloJavaFX

では、HelloJavaFXを表示してみましょう。

JavaFXのダウンロード

こちらからJavaFXを任意の場所にダウンロードしてきます。
今回はVersion11.0.2をダウンロードしました。
2019-12-05-171217_1366x768_scrot.png

Eclipse 1

次にEclipseを開いて、メニューバーから
ヘルプ→Eclipseマーケットプレースを選択します。
検索スペースに「e(fx)clipse」と入力するとでてくるので、それをインストールします。
2019-12-05-170957_1366x768_scrot.png

続いて、新しくJavaFX用のプロジェクトを作成します。今回はHelloJavaFXで作成。
その後に新しくパッケージを作成します。パッケージを作成しないでデフォルトパッケージでやってしまうと後々大変です。今回はhellojavafxで作成。
(そもそもデフォルトパッケージを使うのはあまり良くないとか聞いたので)
module-info.javaは後で作成しますが、今は作らないでおきます。

2019-12-05-172333_1366x768_scrot.png

続いて、先程ダウンロードしてきたJavaFXを展開してください。展開するとlegallibの2つがあると思います。
(Windowsではbinもあるらしいのですが、Linuxはなかったです)

Eclipseに戻って、作ったプロジェクトで右クリックし
ビルド・パス → ビルド・パスの構成 を選択
ライブラリーを選択してモジュールパスを選択し、右側の外部JARの追加を選択します。
先程解凍したJavaFXの中にあったlibにまでいくと、9個のファイルがあると思うので、その中の.jarファイルのみ選択して開くを押してください。

2019-12-05-172959_1366x768_scrot.png

これで追加されたので、適用して閉じてください。プロジェクトに「参照ライブラリー」が追加され、先程追加した.jarファイルが入っていると思います。

ソースコード

次に、コードを書いていきます。今回はHelloFX.javaで作成。

package hellojavafx;

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

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        Label label = new Label("Hello, JavaFX");
        label.setFont(new Font(50));
        stage.setScene(new Scene(new StackPane(label), 500, 400));
        stage.show();
    }

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

内容

Labelの作成

Label label = new Label("Hello, JavaFX");

フォント指定

label.setFont(new Font(50));

stageにSceneをセット、SceneでPaneを表示(Label)、ウィンドウの大きさ指定(Width,Height)

stage.setScene(new Scene(new StackPane(label), 500, 400));

ウィンドウを表示

stage.show();

アプリケーションを起動

launch();

Eclipse 2

特にソースコードにエラーはでていませんが、実行してみると、コンソールでエラーが表示されて何もできません。

エラー: メイン・クラスhellojavafx.HelloFXを検出およびロードできませんでした
原因: java.lang.NoClassDefFoundError: javafx/application/Application

ここで、プロジェクトを作った時に作成しなかったmodule-info.javaを作成します。
プロジェクトで右クリックし、
構成 → module-info.javaの作成 を選択
モジュール名はなんでも良いですが、デフォルトで表示されているプロジェクト名と同じもので作りましょう。作成されると、すでに中身が書いてあると思います。

module HelloJavaFX {
    exports hellojavafx;

    requires javafx.base;
    requires javafx.controls;
    requires javafx.graphics;
}

exportはパッケージの公開。
requiresはモジュールの読み込み。

新Javaプロジェクト作成時に作らなかった理由は、最初に作成すると中身が何もないので、このタイミングで作成したほうがそれだけで終わるので楽だからです。

これで実行してみましょう。

2019-12-05-184831_1366x768_scrot.png

今度はしっかり実行できました。

余談ですが、MACを使っている人でJavaFXを使おうとした時に、アイコンは表示されるがウィンドウが表示されないという現象が起こってました。調べたところ、MACで使用する場合には実行の構成の引数にある「XstartOnFirstThread」のチェックボックスをを外すと解決しました。
こちらを参考

まとめ

今回はHello Worldみたいな感じでした。
気が向いたら、Hello World以降の何かを書こうかなと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした