読者です 読者をやめる 読者になる 読者になる

ひらおかゆみのなげやりブログ

もう、なげやりです…

JavaFXをインストールしてみました

コンピュータ

前々から名前だけは知っていたのですが、JavaFXを少し勉強してみようと思って、インストールをしました。

聞いた話では、JDK7のインストール後にJavaFXインストーラが起動するとのことだったのですが、私のところのJDK7 Update 9ではインストーラが出てきた覚えがない。Windowsの64bit版だから?そんなことはないよね?そう言えばJDK6のインストーラにあったJava DBのチェックもなかったし。

結論を言うと、JavaFXはJDK7のrt.jarと同じところにありました。jfxrt.jarという15MBくらいのファイルがそうです。そう言えばrt.jarも60MB近くあるのですね。

参考資料「JavaFX 2.1のインストール (Windows 編)

 次に、私はEclipseをメインで使っているので、e(fx)clipseというプラグインを入れました。でも、インストール手順がちょっとひどくて、更新サイトのアドレスが間違っているのです。

誤)http://downloads.efxclipse.org/downloads/latest

正)http://downloads.efxclipse.org/p2-repos/releases/latest

更新マネージャにアドレス入れてもエラーになるし、アドレスもNightly buildsと階層構造が違うし、おかしいとは思ったのですが、実際に更新サイトのアドレスをブラウザで開いたら、.zipや.tar.gzのダウンロードサイトじゃないですか!いろいろ探って、上に書いた正しいアドレスを見つけました。

インストールできるプラグインもいくつかに分かれていて、よくわからないので "do not install" と書いてないものだけをインストールしようとすると依存関係云々で先に進めない。いろいろ試してみて、"e(fx)clipse - Composite - FX Tooling" だけをインストールするのが正解のようです。まったく、わかりづらいですよね?

さて、インストールが終わると、Eclipse上からJavaFXのプロジェクトを作成できるようになります。jfxrt.jarがrt.jarと同じところにあるのに "JRE システム・ライブラリー" に含まれず "JavaFX SDK" という別のライブラリに入っているのはこの際目を瞑りましょう。理由が皆目見当つかないです(OracleJDKJavaFXのチームは連携取れてないの?)。

JavaFXを触るのは初めてなので、インストールの待ち時間などを使って「JavaFX 2で始めるGUI開発 第1回 JavaFX 2とは」を読みながら進めています。

e(fx)clipseにはとりあえずFXMLファイルとJavaFXのMainクラスのテンプレートは用意されているようですが、案の定というべきか画面レイアウトを作成するGUIが入っていません。どうもJavaFX Scene BuilderNetBeansだけでなくEclipseでも使えるようなので、これもインストールしました。FXMLファイルを "FXML Editor" で開くとEclipse上での編集となり、"システム・エディター" で開くとScene Builderで編集できるようです。Scene Builderには「ソースを編集」みたいな機能が見つからなくて(私の見落としの可能性があるので、ご存知の方はお声掛けください)、代わりといっていいのかe(fx)clipseでソース(FXML)の編集ができる感じです。

参考にした記事のサンプルでは、FXMLは使わずにJavaのコードだけでGUIを作るようです。テンプレートに記事のサンプルの内容を実装して、私史上初めてのJavaFXアプリケーションを作ってみました。

package org.yumix.javafx;

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

public class Hello extends Application {

  @Override
  public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello, World!");
    
    AnchorPane root = new AnchorPane();
    Label label = new Label("Hello, world!");
    root.getChildren().add(label);
    
    Scene scene = new Scene(root, 400, 100);
    primaryStage.setScene(scene);
    
    primaryStage.show();
  }

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

単に "Hello, World!" と表示するだけのものですが、実際に動いてみるとなん嬉しいものですね。

でも、せっかくインストールしたScene Builderを使わないのは何だかもったいない気がしたので、初めてのサンプルをScene Builderを使って書き直してみました。参考資料は先ほどの記事の続編「JavaFX 2で始めるGUI開発 第2回 シーングラフとFXML」です。ソースコードは割愛しますが、 GitHubに完全な形のプロジェクト(Eclipse形式・e(fx)clipse必須)をアップロードしてあります。

https://github.com/yumix/HelloJavaFX

実は、勢い余ってJavaFX Advent Calendarなるものにエントリしてしまいました。今の流れだと私の担当は12/19、つまり私の誕生日になりそうです。それまでにJavaFXのことを勉強して、恥を書かない程度のものは出したいと思います。そう言えば、今回の参考資料の執筆も、Advent Calendarの主催も櫻庭さん @skrb なのですね。私は今回始めてお名前をお見受けしたのですが、JavaFXのことを知り尽くしているからこそ書ける内容だと感じています(櫻庭さんって、実はとてつもなくすごい方なのかしら?)