フリーの ECMAScript インタプリタ。
Java で記述された JavaScript インタプリタ |
言語拡張 - イベント処理 |
FESI のイベント処理は Java 1.1 のイベントはすべて扱うことができ、 イベントアダプタは必要に応じて動的に生成されます。
FESI を他の製品で埋め込みのスクリプティング機能として使う場合は、 プログラマーの選択によってビルトイン拡張の機能を使うことも別の機能セットを 開発することもできます。
イベントプロシージャには、2 種類あります。ひとつはイベントを引数とする関数、 もうひとつは評価される文字列です。文法解析はイベント起動時に行なわれ、 解析エラーはその場所で発生します。文字列を使った場合は 変数 event がハンドラメソッドの最初の引数に結び付けられます。 変数 this は変数が登録されたオブジェクトに結びつけれます。 どんなオブジェクト (つまりラッパ) でも 1 つの種類のイベントで登録できるのは 1 つ だけです。イベントハンドラに null を使うとイベントハンドラが 解除されます。
イベント引数は Java のイベントの値 (ECMAScript の値としてラップされています) で、 他の Java の値と同じように利用できます。// よく使われる省略 Frame = java.awt.Frame; Button = java.awt.Button; // GUI を作成 f = new Frame("ECMAScript のフレーム"); f.setSize(200,200) b = new Button("FESI"); f.add("Center",b) f.pack(); f.show() // 同じ動作を 2 回使う例 - 最初の方は上書きされ、 // 2 番目の動作だけが処理される b.onAction = "writeln ('ES Action 1');"; b.onAction = "writeln ('ES Action 2');"; // イベントを含んだイベント変数 b.onKeyTyped = "writeln('KEY: ' + event);"; // 関数の使用 - これは動作が登録されるオブジェクト (ラッパ) です function dispose(event) { writeln(); writeln("イベント受取: " + event); writeln("発生元: " + this); this.dispose(); } f.onWindowClosing = dispose; writeln("準備完了"); }