CodeZine(コードジン)

特集ページ一覧

JavaFX 1.0 をいち早く体験してみる

JavaFX 1.0 Previewは0.7に比べてどこが変わったのか?

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/09/08 14:00

目次

スクリプトはコンパイルされる?

 JavaFX Scriptは、インタープリタのスクリプト言語でした。が、プロジェクトを作成し、実際にビルドしてプログラムの動作を確認してから、プロジェクトのフォルダ内を見てみると、「dist」というフォルダが作成され、その中にJarファイルが作成されていることに気が付くはずです。そう、1.0 Preview版では、スクリプトはJavaのクラスファイルにコンパイルされているのです。

 1.0ではJavaFX Scriptのコンパイラが採用されており、NetBeansではこれを使ってスクリプトはJavaのクラスファイルへとコンパイルされるようになっています。このため、作成されたJarファイルをダブルクリックするだけでスクリプトを実行できるようになりました。スクリプトの「その場で書いていつでも修正できる」という手軽さからすれば、インタープリタの方が便利ですが、作成したプログラムを実際に利用することを考えるなら、コンパイラの採用は十分うなずけるものでしょう。ただし、そのおかげで、いろいろと仕様が変更されてしまいました。

JavaFX Script 0.7からの変更点

 これまで0.7として公開されていたJavaFX Scriptは、インタープリタでした。が、実はこれと平行して、既にJavaFX Scriptのコンパイラも開発が行われていたのです。このコンパイラは、インタープリタとはかなり異なる言語仕様になっていました。今回、1.0 Previewで、このコンパイラが標準搭載されたことにより、言語仕様そのものもインタープリタ版からコンパイラ版に変わってしまった、というわけです。要するに、1.0 Previewでのさまざまな仕様変更は、「インタープリタからコンパイラへ」と変わったために起こったものなのです。

Swingベース・アプリケーションの基本形

 では、実際にスクリプトを挙げながら、1.0 Preview版の基本形を見ていくことにしましょう。まず、ごく単純に「Labelを使ってテキストを表示するウインドウ」のアプリケーションを考えてみましょう。

0.7形式の記述
import javafx.ui.*;

Frame {
    title:"Title"
    width:200
    height:100
    visible:true
    content: Label {
        text: "JavaFX!"
    }
}

 これは、従来の0.7で記述した簡単なサンプルです。JavaFXは、SwingをベースにしてGUIを構築します。その土台には、JFrameを継承した「Frame」というクラスが用意されており、これを使ってアプリケーションのウインドウを作成していくのが基本でした。

 1.0では、土台となるウインドウ用のクラスが変わっています。「SwingFrame」という、Swingを利用したフレームのためのクラスが用意されており、これを利用するようになっているのです。

1.0形式の記述
package fxsample;

import javafx.ext.swing.*;

SwingFrame {
    title: "Title"
    width: 200
    height: 200
    visible: true
    content: Label {
        text: "new JavaFX!"
    }
}
図7 実行すると、Labelを貼り付けたウインドウが現れる。
図7 実行すると、Labelを貼り付けたウインドウが現れる。

 これで、ほぼ同様の実行結果になります。見れば分かるように、使用しているクラスがFrameから「SwingFrame」になっていますね。1.0でもFrameクラスはありますが、これはSwingコンポーネントを利用するものではなくなっています。

アプリケーションのベースとなる2つのウィンドウ

 1.0では、アプリケーションの土台となるウインドウ作成用クラスは「Frame」と「SwingFrame」の2つが用意されています。SwingFrameが、Swingコンポーネントを使ったGUI構築のためのフレームクラスです。Frameは、「Stage」と呼ばれるグラフィック表示用のフレームクラスになります(これは後述します)。

Swingコンポーネントの利用

 まずは、Swingコンポーネントの利用に目を向けましょう。Swingでは、SwingFrameというクラスを利用しますが、これには「javafx.ext.swing」というパッケージに用意されています。1.0では、JavaFX関係のクラスのパッケージがかなり変わっています。0.7では、GUI関連のクラスは、すべてjavafx.uiパッケージに収められていましたが、SwingのGUI関係に関しては、javafx.ext.swingに移されています。

 FrameからSwingFrameへとクラスが変わりましたが、基本的な使い方についてはそれほど大きな違いはありません。contentにコンポーネントを組み込んでいくという点は同じです。複数のコンポーネントをレイアウトして配置する場合は、レイアウトマネージャ組み込み済みのパネル・クラスを組み込んで利用します。

package fxsample;

import javafx.ext.swing.*;

SwingFrame {
    title: "Title"
    width: 200
    height: 100
    visible: true
    content: BorderPanel {
        top: Label {
            text: "JavaFX!"
        }
        center: TextField {}
        bottom: Button {
            text: "Click"
        }
    }
}
図8 BorderPanelを利用してLabel、TextField、Buttonのコンポーネントを配置する。
図8 BorderPanelを利用してLabel、TextField、Buttonのコンポーネントを配置する。

 例えば、これはBorderPanelを使い、Label、TextField、Buttonといったコンポーネントを配置した例です。ここでは、SwingFrameのcontentにBorderPanelを組み込み、そのtop、center、bottomにそれぞれコンポーネントを配置しています。このあたりは、0.7でのFrameの利用とほとんど違いないことが分かりますね。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5