先週までは、Rhinoスクリプトエンジンを使用してJavaScriptを扱ってきました。今週と来週は、JavaScript以外のスクリプト言語を組み込んで、使用してみます。
JSR 223に対応したスクリプトエンジンの情報はjava.netのScriptingプロジェクトに集約されています。表1にScriptiningプロジェクトに取りあげられているスクリプト言語とその処理系を示しました。
表1の中にはJRubyやJythonのように、単体ではJSR 223に対応しておらず、Scriptingプロジェクトが公開しているスクリプトエンジンを別途インストールするものや、JavaFX ScriptのようにはじめからJSR 223対応スクリプトエンジンが含まれているものがあります。
また、PHP-Javaブリッジのようにネイティブのスクリプト言語処理系に対するブリッジから構成されるものもあります。
今週はスクリプト言語処理系にJSR 223対応スクリプトエンジンが含まれているJavaFX Scriptを取りあげます。来週は、ScriptingプロジェクトでJSR 223対応スクリプトエンジンを公開しているJRubyを取りあげる予定です。
言語 | 実装 | |
---|---|---|
Scriptingプロジェクトによる スクリプトエンジン |
AWK | Jawk 0.14 |
BeanShell | BeanShell 2.0b5 | |
ejs (Embedded JavaScript) | ||
FreeMarker | FreeMarker 2.3.11 | |
Groovy | Groovy 1.5.1 | |
Jaskell | Jaskell 1.0 | |
Java | Java Compiler API (JSR 199) | |
JavaScript | Rhino 1.6R7 | |
JavaScript (Web Browser) | Web Browser's native JS | |
Jelly | Jelly 1.0 | |
JEP | JEP (Java Math Expression Parser) 2.4.0 | |
Jexl | Jexl 1.0 | |
jst (JavaScript Templates) | TrimPath JavaScript Templates 1.0.38 | |
JudoScript | JudoScript 0.9 | |
JUEL | JUEL 2.1.0-rc2 | |
OGNL | OGNL 2.6.9 | |
Pnuts | Pnuts 1.1 | |
Python | Jython 2.2.1 | |
Ruby | JRuby 1.0 | |
Scheme | SISC 1.16.6 | |
Sleep | Sleep 2.0 | |
Tcl | Jad 1.3.3 | |
Velocity | Velocity 1.5 | |
XPath | JDK 6.0 | |
XSLT | JDK 6.0 | |
その他 | JavaFX Script | OpenJFX |
AppleScript | jasconn (Java-AppleScript-Connector)) | |
Bex | Bex 1.2 | |
OCaml | OCamlScripting 1.0-alpha | |
PHP | Quercus | |
PHP (native) | PHP/Java Bridge 3.2.1 | |
Python (native) | Jepp 2.3 | |
Smalltalk | Athena 0.1 |
JavaFXをJava SE 6から扱う
JavaFXは、Javaをベースにした新しいプラットフォームであり、ユーザインタフェースを効率よく開発することを目的としています。
このJavaFXの中核となるのがGUIに特化したスクリプト言語であるJavaFX Scriptです。
JavaFXはデスクトップシステムから携帯電話などの組み込み用途まで幅広くカバーしており、アプレットやJava Web Startでも動作させることができます。いずれの場合も、JavaFX Scriptによってユーザインタフェースを構築します。
JavaFXは昨年のJavaOneで発表され、筆者もJavaOneレポートで紹介しました。
このJavaFX ScriptをJava SE 6から扱ってみましょう。
まずはインストールから行ないます。JavaFXの処理系は、java.netのOpenJFXプロジェクトで公開されています。ダウンロードはダウンロードページのソースコードの項目から行ないます。
スクリプトエンジンのダウンロードにはSubversionを使用する方法と、ZIPファイルもしくはtar.gzファイルを使用する方法の2種類があります。ここではWindows Vista上で扱いやすいようにZIPファイルを使用しました。
ダウンロードの項目の「tar.gzもしくはzipファイル」をクリックして、ダウンロードページに進みます。原稿執筆時点(2008年2月)では、OpenJFX-200710081507.zipが最新のファイルです。このファイルをダウンロードし、適当な場所に展開します。
展開するとtrunkやtagsといったディレクトリが作成されます。ようはSubversionのディレクトリ構成をそのまま圧縮しただけということが分かりますね。
それはそれとして、JavaFX Scriptの本体はtrunk/lib/javafxrt.jarファイルになります。このJARファイルの中にJSR 223対応のスクリプトエンジンも含まれています。JavaFX Scriptの実行には、javafxrt.jarファイル以外に、Filter.jarファイルとswing-layout.jarファイルもクラスパスに指定します。
ここでは、ZIPファイルをC:\openjfxに展開しました。したがって、javafxrt.jarファイル等はC:\openjfx\trunk\libディレクトリにあります。
それでは、まずJavaFX Scriptのスクリプトを作成しましょう。JavaFX Scriptのファイル拡張子はfxになります。
サンプルのソース | ClickMe.fx FXLauncher.java |
---|
このスクリプトはフレームを作成して、ボタンを貼るという簡単なものです。
import javafx.ui.*; import java.lang.*; var frame = Frame { var: frame title: "Click Me!" width: 180 height: 80 visible: true // クローズボタンをクリックされたときの処理 onClose: operation() { frame.dispose = true; } // フレームに貼るコンテンツ content: Button { // ボタンに表示する文字列 // HTMLが使用可 text: "<html><h3>Click Me!</h3></html>" // ボタンがクリックされたときの処理 action: operation() { System.out.println("Clicked!!!"); } } };
一見すると、JavaScriptのオブジェクトリテラル形式もしくはCSSのような感じですね。この表記の方法が宣言的文法と呼ばれるものです。Javaの手続き的な記述とはずいぶん異なることが分かります。
ここでは、JavaFX Scriptの文法を詳細に解説することはしませんが、簡単に解説しましょう。
JavaFX Scriptは、クラス名 { } でオブジェクトを生成します。大カッコの内部で、アトリビュートに値を代入します。
赤字で示したvar: frameだけは特殊な表記で、自分自身をframeという変数で表すことを意味しています。Javaでいうところの、thisに相当するものです。
フレームに貼るボタンを表しているのが青字の部分です。contentアトリビュートにButtonオブジェクトを生成して、代入しています。
JavaFXのButtonやLabelなどの文字列を扱うクラスは、Swingと同様にHTMLを扱うことが可能です。また、ボタンがクリックされたときの処理はactionアトリビュートで表されます。ここでは標準出力に文字を出力するオペレーションを定義して、代入しています。