フリーの ECMAScript インタプリタ。
Java で記述された JavaScript インタプリタ

 
言語拡張 - イベント処理
イベント処理の機構は Netscape のイベント処理と文法はよく似ていますが、 意味には違いがあります。この差異は目的が異なるために必要となるものです。 FESI のイベント処理機能は Java 1.1 の イベント (AWTJavaBeans、Swing で使われています) を 処理することに向けたもので、特定のブラウザ環境を対象にしたものではありません。 このイベントの機構は Bean にも Bean 以外にも使えます (Java 1.1 のイベントモデル に沿ったものであれば)。

FESI のイベント処理は Java 1.1 のイベントはすべて扱うことができ、 イベントアダプタは必要に応じて動的に生成されます。

FESI を他の製品で埋め込みのスクリプティング機能として使う場合は、 プログラマーの選択によってビルトイン拡張の機能を使うことも別の機能セットを 開発することもできます。

イベントプロシージャには、2 種類あります。ひとつはイベントを引数とする関数、 もうひとつは評価される文字列です。文法解析はイベント起動時に行なわれ、 解析エラーはその場所で発生します。文字列を使った場合は 変数 event がハンドラメソッドの最初の引数に結び付けられます。 変数 this は変数が登録されたオブジェクトに結びつけれます。 どんなオブジェクト (つまりラッパ) でも 1 つの種類のイベントで登録できるのは 1 つ だけです。イベントハンドラに null を使うとイベントハンドラが 解除されます。

// よく使われる省略
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("準備完了");
}
イベント引数は Java のイベントの値 (ECMAScript の値としてラップされています) で、 他の Java の値と同じように利用できます。
イベントハンドラの名前は次のようになります。
    1. 単一の関数ハンドラを持つイベントリスナ (ActionEvent など) では、 イベント名またはイベントハンドラ名 (前に "on" をつけたもの) が使えます。
    2. 複数のイベントハンドラを持つイベントリスナ (WindowEvent など) では、 関数名 (前に "on" をつけたもの) を使わなければなりません。
注:
メインページに戻る

最終更新日 (原文): 1998 年 3 月 12 日
(翻訳): 1999 年 4 月 1 日