JavaFX Advent Calendar 2012の7日目のエントリーです。
昨日は@fukai_yasさんの「AppletでFXMLを使って罠にハマる」です。
明日は@btnrougeさんです。

JOptionPaneが使いたい

JavaFX 2.2.3で業務に利用する簡単なツールを作っていたのですが、入力エラーを通知する為に、 SwingでいうところのJOptionPane相当のものを探したのですがみつかりませんでした。 誰か知っている人はいないだろうかとTwitterでつぶやいてみたところ、@skrbさんよりこんなお返事を頂きました。

Project SandboxでJOptionPane相当のDialogsクラスが提供されているということ。JavaFX 8 に入るらしい。 すばらしい!すばらしいけど、今使いたい。そこでひとまずProject Sandboxを動かしてみる事にしました。

OpenJFXをビルドする

Project SandboxはOpenJFXのSandboxプロジェクトで、これを利用する為には、Mercurialに登録されているソースをコンパイルする必要があるようです。 そこでOpenJFXのページに書かれているビルド手順を実行します。 でもこれ、記述が古い。JDKのフォルダ構成とか、今のものとはかなり違う。さて困った。

そこで新たな情報を求めていると、Building OpenJFXという、 まさに望んだ通りのページがありました。手順は次のようになります。 また、コンパイルにはJDK 8 が必要です。

  • mkdir -p ~/open-jfx
  • cd ~/open-jfx
  • hg clone http://hg.openjdk.java.net/openjfx/8/master
  • cd master
  • mkdir -p artifacts/sdk/rt/lib
  • cp -r <PATH TO JDK>/jre/lib/jfxrt.jar artifacts/sdk/rt/lib
  • hg clone http://hg.openjdk.java.net/openjfx/8/master/rt
  • cd rt
  • ant

今度こそ、コンパイル出来そうな感じです。最後のantを実行すると、何個かのモジュールのjarが出来上がっていきます。 が、javafx-ui-commonというモジュールのコンパイルが通りません。JDKのバージョンの問題かもしれないと思ったのですが、 JDK 8 はJDK 8 b65というもので、この時点では最新のものです。 ここで1日試行錯誤を繰り返したものの、解決の糸口はなく、ビルドはあきらめる事にしました。

やっぱりJOptionPaneが使いたい

OpenJFXのコンパイルにかなりの時間を取られたのですが、本来の目的はJOptionPane相当のものが使いたいだけです。 最初に教えて頂いたページのコメント欄を読んでいると、 Marco Jakobさんという方がJavaFX 2.2でも利用できるDialogsがあると書いています。やったね、これじゃん!

ということで、早速リンク先に行ってみると、 使い方が大変詳しく記述されています。詳しくはリンク先をご覧頂くとして、例えば下記のようなコードを書くだけで、 ダイアログが表示されます。

Dialogs.showErrorDialog(stage, null, "名前が入力されていません。", "Error");

まとめ

JavaFX 8 になると、これ以外にも業務で利用できそうなTreeTableViewなど、様々なもの増えるようです。 JDK 8 が待ち遠しいですが、現状ではコンパイルもままならないので、今回さわったDialogsクラスをしばらくメインで使わせてもらうつもりです。 しかし、JavaFXはUIが綺麗で楽しくなりますね。