アプリケーションのイベント処理をJavaScriptで!
最後に、一般的なアプリケーションでの利用例もあげておきましょう。アプリケーションでJavaScriptを利用するメリットにはどのようなものが考えられるでしょうか。いろいろとあるでしょうが、例えば「処理の一部分をスクリプトで実装させる」ことができるようになる、という点が上げられます。
例えば、「ボタンをクリックしたときの処理」をJavaScriptで実装するわけです。あらかじめテキストファイルにスクリプトを書いて用意しておき、それを読み込んで実行させるようにしておけば、完成したアプリケーションのイベント処理を後で自由に修正できるようになります。
では、実際に簡単なサンプルを作ってみましょう。ここでは「JavaScriptApp.java」という名前でプログラムを作成してみることにします。
package jp.tuyano;
import java.awt.HeadlessException;
import java.awt.event.*;
import java.io.*;
import javax.script.*;
import javax.swing.*;
public class JavaScriptApp extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
ScriptEngine engine = null;
FileReader reader = null;
JLabel label = null;
JTextField field = null;
JButton button = null;
public JavaScriptApp() throws HeadlessException {
this.setSize(300, 250);
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label = new JLabel();
label.setBounds(25, 50, 250, 20);
field = new JTextField();
field.setBounds(25, 100, 250, 20);
button = new JButton("click");
button.setBounds(100, 150, 100, 25);
button.addActionListener(this);
this.add(label);
this.add(field);
this.add(button);
ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("JavaScript");
engine.put("label", label);
engine.put("field", field);
engine.put("button", button);
try {
String filename = "script.js";
reader = new FileReader(filename);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void actionPerformed(ActionEvent ev) {
try {
engine.eval(reader);
} catch (ScriptException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
new JavaScriptApp().setVisible(true);
}
}
JLabel、JTextField、JButtonがそれぞれ1つずつあるだけの、ごく単純なアプリケーションですね。ここではボタンをクリックしたときのactionPerformedで、ScriptEnginのevalを実行させています。ちょっとおもしろいのは、evalの引数にjava.io.FileReaderインスタンスを渡している点です。このようにすると、そのFileReaderから読み込んだスクリプトを実行させることができるのです。
では、実行させるスクリプトを作成しましょう。ここでは「script.js」というファイル名で以下のようにスクリプトを作成し、アプリケーションのディレクトリに保存します。
str = field.getText();
label.setText("you type:" + str);
ごく単純に、入力したテキストをJLabelに表示するというだけのものです。できあがったら、プログラムをビルドして動かしてみましょう。ボタンをクリックすると、script.jsに書いたスクリプトが実行されるのがわかるはずです。
ボタンを押すとスクリプトが実行される。 |
――以上、Java 6でサポートされたスクリプトエンジンの利用についてまとめてみました。Javaとスクリプト言語が融合すると、いろいろと面白い使い方ができそうなことが実感できたでしょうか。非常に簡単に利用できる機能ですから、皆さんも一度試してみると面白いですよ。