JDK1.02 との互換性について

JDK1.1は JDK1.0.2 の完全なスーパーセットです。 したがって JDK1.0.2 の古いイベントモデルに基づくプログラムも 書き直す必要はありません。 ただし、そのためにイベントを扱うクラスやメソッドに 一種の「二重構造」が存在することになります。
JDK1.1 は JDK1.0.2 までの古いイベントモデルも完全にサポートします。 プログラムはどちらのスタイルで記述してもかまいません。 また、記述の混在も可能です。
このような事情のために、同じ目的を持つクラスやメソッドが2種類 存在するケースが生じます。 イベントを表すクラスそのものがそうでした。新しいモデルのイベントの クラスの共通のスーパークラスは EventObject です。これは、Event と いう名前が既に古いモデルの方で使用されているためでしょう。 イベントを取り扱うメソッドも同様です。たとえばマウスのドラッグを 処理するメソッドの名前は、古いモデルでは mouseDrag()、 新しいモデルでは mouseDragged() です。

イベント処理のメソッドの名前の新旧対応表
JDK1.0のスタイル JDK1.1のスタイル
mouseEnter() mouseEntered()
mouseExit() mouseExited()
mouseDown() mouseClicked()
mousePressed()
mouseUp() mouseReleased()
mouseMove() mouseMoved()
mouseDrag() mouseDragged()
keyDown() keyTyped()
keyPressed()
keyUp() keyReleased()
gotFocus() focusGained()
lostFocus() focusLost()
action() actionPerformed()
itemStateChanged()
textValueChanged()
ajustmentValueChanged()

新しいイベントモデルでは、イベントの伝搬はウィンドウの親子関係とは無関係 で、プログラム内で明示的に行います。 このためイベント処理のメソッドは void 型です。 また、引数はイベントのクラスのオブジェクト1つのみです。 位置やキーの種類など必要な情報は、イベントオブジェクトから取り出します。 新しいイベントのクラスは、フィールド(変数)へのアクセスは全て専用の メソッドを利用するようになりました。


public void mouseClicked( MouseEvent evt ) {

     int x = evt.getX();   // イベント発生のX座標の取得
     int y = evt.getY();   // イベント発生のY座標の取得
               :
}

1.0 のイベントのイベントオブジェクトを 1.1 のイベントのオブジェクトへ変換することができます。 1.1 のイベントの各クラスは引数に Eventクラスのオブジェクトを 与えるコンストラクタを持っています。

また、JDK1.1 から、キーボードフォーカスの取得の処理が、 アプリケーションの側で操作し、システムに依存しない方向に変更されています。 このため、JDK1.0 では必要でなかった、「キーボード・フォーカスの要求」の 操作を明示的に行わないと、アプレットが正しく動作しない場合があります。 もし、JDK1.0 では動いていたのに JDK1.1 から正しくキー入力の処理が できなくなった場合には、 次のように mouseEntered() もしくは mouseClicked() の中で、 キーボード・フォーカスを要求する行を追加してください。 (どちらのメソッドで行うかは、そのアプリケーションのポリシーで決定 してください。)


public void mouseEntered( MouseEvent evt ) {

       requestFocus(); // キーボード・フォーカスの要求
               :
               :
}