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

NetBeans で JavaFX (Windows 編)

JavaFX

JavaFX シリーズ目次


[追記] NetBeans 7.2 から JavaFX 用の Java プラットフォームを作成しなくても、JavaFX が使えるようになりました。



前回は JavaFXSDK をインストールしたので、今回は NetBeans IDE で JavaFX の開発環境を整備していきます。

ところで、IDE に Eclipse を使いたいという方もいらっしゃるかもしれませんが、JavaFX の場合はおすすめできません。というのも、現状 JavaFXEclipse Plug-in が提供されていないからです。

また、Oracle の方針からしても、NetBeans が優先で、Eclipse は後回しになっているため、たとえ Eclipse の Plug-in が出たとしてもちゃんとメンテナンスされるかどうかは疑問符がつきます。

もちろん、Plug-in なしでも JAR ファイルをクラスパスに含めればいいだけなので、開発は可能です。でも、わざわざそこまでして Eclipse で開発する意義は感じないです。

NetBean の環境設定

今回使用する NetBeans のバージョンは 7.1 です。

すでに NetBeans 7.1 はインストールされているものとします。ただ、このままでは JavaFX は使えません。

NetBeans では複数の Java のバージョンを同時に扱うため、Java プラットフォームというのを設定できます。JavaFX もこの Java プラットフォームを設定する必要があります。

Java プラットフォームを設定するには、メニューバーの [ツール]-[Java プラットフォーム] から行います。

f:id:skrb:20120208001616p:image


すると、[Java プラットフォームマネージャ] ダイアログが表示されます。通常はデフォルトのプラットフォームしか表示されていないはずです。下の図の場合、JDK 7がデフォルトになっています。

問題なのは、このデフォルトの Java プラットフォームでは JavaFX が使えないということです。そのため、プラットフォームを追加する必要があります。

f:id:skrb:20120208002149p:image


プラットフォームを追加するには、上手の赤四角で囲った [プラットフォームを追加] ボタンから行います。ボタンをクリックすると、JDK を選択するためのファイルチューザーが表示されます。

f:id:skrb:20120208002535p:image


ここで追加する JDK を選択します。選択するのは、デフォルトで表示されていた JDK でも大丈夫です。ここでもデフォルトの JDK である JDK 7u2 を選択しています。

JDK を選択して、[次へ] ボタンをクリックすると、プラットフォーム名を入力する画面に移ります。

f:id:skrb:20120208002800p:image


プラットフォーム名は適当なものでかまいません。JavaFX が使えるということを明示するのであれば、JavaFX という文字列を入れておけばいいかもしれません。でも、ここではデフォルトのまま JDK 1.7 にしておきます。

入力が終了したら、[完了] ボタンをクリックします。すると、再び Java プラットフォームマネージャーに戻ります。プラットフォームが追加されていることが分かるはずです。

ところが、先ほどのデフォルトのプラットフォームとは違うタブが!!

f:id:skrb:20120208003351p:image


では、この [JavaFX] のタブを開いてみましょう。

f:id:skrb:20120208003712p:image


JavaFX を使えるようにするため、左上の [JavaFX を有効にする] をチェックし、JavaFX SDK の場所を入力します。右側の [参照] ボタンをクリックすると、ファイルチューザーが開くので、そこで選択しても大丈夫です。

JavaFX SDK の場所だけ入力すれば、ランタイムと Javadoc は自動的に入力されます。一番下のソースは現状提供されていないので、空欄のままで大丈夫です。

f:id:skrb:20120208004015p:image


最後に [閉じる] で、Java プラットフォームの設定を終了させます。

これで、JavaFX を使う準備は完了です。

サンプルの実行

JavaFX を使う準備ができたので、NetBeans に付属している JavaFX のサンプルを実行してみましょう。

メニューバーの [ファイル] -> [新規プロジェクト]、もしくはプロジェクトペインで右クリックして表示されたポップアップメニューの [新規プロジェクト] を選択します。すると、[新規プロジェクト] ダイアログが表示されます。

左側のカテゴリの中から、[サンプル] -> [JavaFX] を選択すると、右側にサンプルが列挙されます。今回はこの中から、[ColorfulCircles] を選びます。

f:id:skrb:20120208071445p:image


[次へ] でプロジェクトの名前と場所を設定します。デフォルトのままでもかまいませんし、編集してしまってもかまいません。とりあえず、ここでは名前はデフォルトのまま ColorfulCircles にしておきます。

重要なのがその下の [JavaFX プラットフォーム] です。ここが先ほど設定した JavaFX が使用できる Java プラットフォームになっているか確認してください。

[完了] をクリックすれば、プロジェクトが作成されます。

f:id:skrb:20120208071935p:image


ちなみに、Java プラットフォームはメニューバーの [ツール] -> [Java プラットフォーム] から設定しましたが、このダイアログの [プラットフォームを管理] からでも可能です。

プロジェクトはできたので、次は実行です。

実行にはプロジェクト名を右クリックし、[実行] を選択します。

f:id:skrb:20120208072540p:image


もし、プロジェクトがシュプロジェクトになっているのであれば、ツールバーの [実行] -> [主プログラムを実行]、もしくは F6 キーからでも実行できます。

実行すると、下の図のようにカラフルな円が表示されます。

f:id:skrb:20120208072804p:image


ほかにもいろいろサンプルがあるので、ぜひ試してみてください。

JavaFX プロジェクトの作成

サンプルが実行できたら、今度は自分で JavaFX のプロジェクトを作成してみましょう。

サンプルのプロジェクトを作成した時と同じように、ツールバーの [ファイル] -> [新規プロジェクト]、もしくはプロジェクトペインを右クリックでポップアップメニューの [新規プロジェクト] を選択します。[新規プロジェクト] ダイアログが表示されたら、カテゴリの [JavaFX] を選択します。

f:id:skrb:20120208073331p:image


[JavaFX] カテゴリには、次の3つのプロジェクトの種類があります。

  • JavaFX アプリケーション
  • JavaFX プレローダー
  • JavaFX FXML アプリケーション

[JavaFX アプリケーション] が通常の JavaFX を使用したアプリケーションの作成に使用します。

[JavaFX プレローダー] は、JavaFX プリケーションの前に起動させる、小さいなアプリケーションです。起動の待ち時間を見かけ上減らすために使用します。特にアプレットなどクラスのロードに時間がかかるようなアプリケーションに有効です。

いわゆる起動時のスプラッシュイメージのアプリケーション版みたいなものです。

最後の [JavaFX FXML アプリケーション] は、GUI の構造を FXML という XML ドキュメントで表したアプリケーションです。

大きめなアプリケーションであれば FXML を使うのが普通ですが、ここでは単なる [JavaFX アプリケーション] を使用します。

[次へ] をクリックすると、サンプルの時と同様にプロジェクトの名前と場所を設定する画面に映ります。

デフォルトだと JavaFXApplication1 という名前 (数字の部分は違うかもしれません) になっているはずです。ここではこのままにしておきましょう。

サンプルプロジェクトを作成した時と同様、ここでも [JavaFX プラットフォーム] が JavaFX が使用できる Java プラットフォームになっていることを確認してください。

後は、[アプリケーションクラスを作成] をチェックし、クラス名を記入してください。デフォルトのままでもかまいません。

f:id:skrb:20120208074248p:image


[完了] をクリックして、プロジェクトを作成しましょう。

プロジェクトを作成すると、先ほど設定したメインクラス (アプリケーションクラス) がエディターに表示されます。

このクラスだけで、実行できる状態にあるのでとりあえず実行してみましょう。

先ほどと同じように、プロジェクト名を右クリックして [実行] を選択します。

f:id:skrb:20120208074738p:image


実行すると、[Say 'Hello World'] というボタンが表示されます。このボタンをクリックすると、NetBeans の下側の [出力] ペインに Hello World! と出力されるはずです (赤線は櫻庭が追加したものです)。

f:id:skrb:20120208075148p:image


今回はここまでで、プログラムの解説は次回以降行いますが、プログラムだけは示しておきます。

package javafxapplication1;

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 JavaFXApplication1 extends Application {

    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        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);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

他で作られた JavaFX プロジェクトを開く

最後に、他で作られた JavaFX プロジェクトを開くことをしてみましょう。そんなの簡単じゃないと思うかもしれないのですが、JavaFX を使用するための Java プロジェクトのせいで、ちょっと面倒になっています。

ここでは、Getting Started with FXML のサンプルを開いてみます。

Getting Started with FXML の右側のサイドバーに Download Source Code とあり、その下に FXMLExample.zip のリンクがあるので、ここからダウンロードしてください。

ZIP ファイルは展開して、適当な場所に配置してください。ここでは C:\temp\FXMLExample に配置しました。

では、このプロジェクトを開いてみましょう。

プロジェクトを開くにはツールバーの [ファイル] -> [プロジェクトを開く]、もしくはプロジェクトペインで右クリックし [プロジェクトを開く] を選択します。

すると、ファイルチューザーが表示されます。そこで、先ほどの FXMLExample を指定します。NetBeans で読み込めるプロジェクトはディレクトリのアイコンがコーヒーカップになっているので、すぐに判別がつきます。

f:id:skrb:20120208192046p:image


ディレクトリを指定して、[プロジェクトを開く] ボタンを選択します。すると、下のような警告ダイアログが表示されます。

f:id:skrb:20120208192238p:image


この警告が Java プロジェクトに起因しているのです。

[問題を解決] というボタンがあるのでクリックしてみます。すると、問題の説明を表したダイアログが表示されます。

f:id:skrb:20120208192501p:image


ダイアログの下部に表示されている説明には下のように書いてあります。

問題: プロジェクトで "Default_JavaFX_Platform" という Java プラットフォームが使用されていますが、このプラットフォームが見つかりませんでした。

対処法: 「解決」をクリックして、"Default_JavaFX_Platform" というプラットフォームを新規作成してください。

ようするに Java プラットフォームが見つからないということなのです。

先ほど、JavaFX が使える Java プラットフォームを登録しましたが、そのときに名前を任意に決められるということを思い出してください。

ようするに、ここに書かれている "Default_JavaFX_Platform" というのは、このサンプルを作った人が JavaFX を使うために作った Java プラットフォームなのです。

もちろん、そんなプラットフォームは登録していないので、警告が表示されているのです。

ここで、[解決] ボタンがあるので、これをクリックして解決を.... 図ることはできません。

とりあえず、ここでは [閉じる] ボタンをクリックして、ダイアログを閉じます。

警告が出たままなので、プロジェクトペインでも FXMLExample は赤く表示されたままです。

f:id:skrb:20120208193632p:image


ここで、プロジェクトペインで FXMLExample を右クリックして、ポップアップメニューから [プロパティ] を選択します。

f:id:skrb:20120208193959p:image


すると、[プロジェクトプロパティー] ダイアログが表示されるので、[カテゴリ] の中から [ライブラリ] を選択します。

f:id:skrb:20120208194201p:image


[ライブラリ] の一番上部には Java プラットフォームを選択できるコンボボックスがあります。ここには先ほど存在しないとされていたプラットフォームが選ばれた状態になっているはずです。

そこで、コンボボックスの選択肢の中から JavaFX が使用できるプラットフォームを選択します。もちろん、ここでは [JDK 1.7] です。

f:id:skrb:20120208194437p:image


[JDK 1.7] を選択しても、ダイアログの下部には [一部のライブラリ項目が見つかりません。「参照の問題を解決」ダイアログを使用してください] と黄色で表示されています。でも、これは無視して大丈夫です。

最後に [了解] ボタンをクリックして、ダイアログを閉じましょう。

これで、このプロジェクトを使えるようになりました。プロジェクトペインでも、赤字ではなく、通常表示に戻っているのを確認してください。

f:id:skrb:20120208194951p:image


では、実行してみましょう。プロジェクト名を右クリックし、[実行] を選択します。すると、下のようなウィンドウが表示されます。

f:id:skrb:20120208195137p:image


ここで示したように、他の人が作成したプロジェクトは Java プラットフォーム名が異なっている場合がほとんどです。これを修正しないと、プロジェクトを使うことができないので注意しましょう!!

NetBeans 7.1beta で作られたプロジェクトを読み込む

NetBeans 7.1beta の頃も JavaFX のプロジェクトを作成できたのですが、残念ながらそのままでは NetBeans 7.1 では読み込むことができません。

というか、プロジェクトとして認識できません。

また、読み込めたとしても、プロジェクトの実行時に

Target "jfxsa-run" does not exist in the project

というエラーコードが表示されて、実行できません。

これは 7.1beta と 7.1 で Ant のビルドファイルの仕様が微妙に変わったからのようです。

こういう場合は、しかたないので同じ名前のプロジェクトを作成して、ソースだけ古いプロジェクトからコピーするようにします。