Javaでのイベント処理方法

広告

まずイベントの処理方法をマウスイベントを例に確認していきます。

Javaではマウスがクリックされたとか、キーボードが押されたなどのイベント情報を、受け取りたいイベントだけを登録するようになっています。つまり何もしなければイベントは発生しているけれどもその情報を受け取らないことになっています。これは実際には使わないイベントを受け取っても仕方がないからです。

そこでまずマウスイベントを受け取れるように設定します。その為には2つの処理が必要となり、クラスがマウスイベントを受けれるクラスになるためにMouseListenerインタフェースを実装すること、そしてマウスイベントを受け取ることを宣言することです。

MouseListenerインターフェースを実装するには下記のように記述します。

public class EventTest extends Applet implements MouseListener{

}

これで、このクラスはマウスイベントを処理することが出来るクラスとなりました。MouseListenerインターフェースを実装するには、定義しなければいけないメソッドが5つありますが、これは後で見ていきます。

次にマウスイベントを受け取るよと宣言します。これにはAppletクラスの親クラスであるComponentクラスで定義されているaddMouseListenerメソッドを使います。

このコンポーネントからマウスイベントを受け取るために、指定されたマ
ウスリスナーを追加します。l が null の場合、例外はスローされず、処
理も実行されません。

パラメータ:
  l - マウスリスナー

引数にはマウスイベントを受け取るクラスなどを指定しますが、ここで指定できるのはMouseListenerインターフェースを実装したクラスだけです。先ほど作成するクラスにMouseListenerインターフェースを実装するようにしたのは、マウスイベントを自分自身のクラスで受け取りたいためです。自分自身で受け取る場合の記述は例えば下記のようになります。

public class EventTest extends Applet implements MouseListener{
  public void init(){
    addMouseListener(this);
  }
}

もしマウスイベントを処理するために別のクラスを用意したい場合は、MouseListenerインターフェースを実装したクラスを用意して、addMouseListenerメソッドの引数に指定して下さい。例えば下記のようになります。

public class EventTest extends Applet{
  public void init(){
    EventShori shori = new EventShori();

    addMouseListener(shori);
  }
}

public class EventShori implements MouseListener{

}

これでマウスイベントを受け取る事ができるようになりました。次にマウスのイベントの種類によって別々のメソッドが内部的に呼び出されるため、必要なメソッドを全て定義しなければなりません。これは画面の再描画が必要になった時に、内部的にpaintメソッドが呼び出されるのと同じように、例えばアプレット上でマウスがクリックされたらmouseClickメソッドが呼び出されるというのと同じです。

注意点はpaintメソッドなどは元々定義してあったものを自分で再定義しているのに対して、イベント処理用のメソッドは元になる定義されたメソッドがないので、呼び出される可能性のあるメソッドは使う使わないに関わらず全て定義しておかなければならないことです。

マウスイベントを受け取るようにした場合、発生する可能性のあるイベントは「マウスがアプレットの上に乗った」「マウスがアプレットの外へ出た」「マウスが押された」「マウスが押された状態から離された」「マウスがクリックされた」の5つです。それに呼応して呼び出されるメソッドは下記のようになります。

mouseEntered   マウスがアプレットの上に乗った
mouseExited    マウスがアプレットの外へ出た
mousePressed   マウスが押された
mouseReleased  マウスが押された状態から離された
mouseClicked   マウスがクリックされた

この5つのメソッドはMouseListenerインターフェースの中で定義しなければいけないメソッドとして定義されています。

よってマウスイベントを処理するための最低限必要な構成は下記のようになります。

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class EventTest extends Applet implements MouseListener{
  public void init(){
    addMouseListener(this);
  }

  public void mouseEntered(MouseEvent e){
  }

  public void mouseExited(MouseEvent e){
  }

  public void mousePressed(MouseEvent e){
  }

  public void mouseReleased(MouseEvent e){
  }

  public void mouseClicked(MouseEvent e){
  }
}

この中で例えばマウスがクリックされた時に何か処理を行いたい場合には、mouseClickedメソッドの中で記述することになります。

( Written by Tatsuo Ikura )