JavaFXの構文とJavaとの相乗効果
JavaFXは、JavaFX ScriptとJavaFX Mobileで構成されるプロダクトフレームワークです。JavaFX Script(JavaFXと略されます)は、機能や操作性に優れたユーザーインターフェースを提供するためのスクリプト言語です。そしてJavaFX Mobileは、その名のとおり、モバイルプラットフォーム向けのJavaFXです。
JavaFX Scriptでは、JavaScriptやScalar Vector Graphics(SVG)に似た宣言的構文が採用されています。例として、図1、図2、図3に示すようなちょっとした「Hello World」風のウィンドウを作成するJavaFXコード(インポート部分を除く)を示します。
Stage {
title: "Cool Running"
width: 250
height: 80
scene: Scene {
content: Text {
font: Font {
size: 20
}
x: 10,
y: 30
fill: Color.GREEN
content: "JavaFX is cool"
}
}
}
ご覧のように、JavaFXはJavaやJavaScriptに似たところもありますが、どちらとも違っています。



JavaFXの宣言的スタイルは、命令型プログラミングの形をとるJava Swingとの比較によってさらに明確になります。次のSwingコードは、先ほどの例と同じ「Hello World」風ウィンドウを作成するものです(ここでもインポート部分は割愛)。
public class Main {
public static void main(String[] args) {
JFrame aFrame = new JFrame("Cool Running");
aFrame.setSize(250, 80);
JPanel content = new JPanel();
content.setLayout(new BorderLayout(5, 5));
content.setBackground(Color.WHITE);
JLabel aLabel = new JLabel("Swing is cool");
aLabel.setFont(new Font(null, Font.PLAIN, 20));
aLabel.setForeground(Color.GREEN);
content.add(aLabel, BorderLayout.CENTER);
aFrame.setContentPane(content);
aFrame.setVisible(true);
aFrame.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
命令型の実行形式をとるSwingの特徴(つまり、ステートメント単位の制御フロー)がよく分かります。これは、従来のJava UIの開発で使われてきたやり方です。図4に、このJava Swingコードの実行結果を示します。

既に述べたようにJavaFXはJavaでもJavaScriptでもありませんが、Javaクラスの呼び出しやJavaクラスからの呼び出しが可能です。例えば、ウィンドウのサイズを求める次のJavaFXスクリプトでは、Stageオブジェクトのサイズを書き換えるのに標準のJava Mathクラスを使用しています。
var i = 250;
var j = 300;
Stage {
title: "Cool Running"
width: java.lang.Math.max(i, j)
height: 80
scene: Scene {
...
Sunは、Adobe Flexのような他のテクノロジにはない利点の1つとして、JavaFXが既存のJavaコードを利用できる点を大いに宣伝しています。また、JavaFX Scriptはどんなアプリケーションも構築可能なプラットフォームですが、SunはそのねらいをUI開発に定めており、ビジネスコンポーネントやバックエンドコンポーネントは開発の対象としていません。
