AWTのイベント処理


「はじめてのJava」では、AWTによるGUIアプリケーションの基礎について簡単に説明をしました。その際、ボタンをクリックして何かの処理を行わせるという、イベント処理の基本についても説明をしましたね。

が、イベント処理というのは「ボタンを押すと何かを行う」ということだけではありません。ボタン以外のものをクリックしたり、あるいはドラッグしたりしたときに処理を実行することもあるでしょう。更には、キーボードをタイプしたときに何かを行わせる場合もあるかも知れません。今回は、こうした操作に柔軟に対応させるためのイベント処理について説明をしましょう。

さて、AWTのイベント処理は「イベントリスナー」と呼ばれるものを使って行いました。覚えていますか? JavaのGUIコンポーネントでは、さまざまな操作に対応するイベントを処理するのに「イベントリスナー」が用意されていました。何かのイベント処理を行う場合には、まずコンポーネントに対応するイベントリスナーを作成し、それをコンポーネントに組み込む、というのが基本でしたね。

Javaでは、コンポーネントにイベントリスナーを組み込み、その中でイベント処理を用意する。


マウスリスナーの利用


では、マウスを操作したときのイベント処理からやってみましょう。マウスに関するイベント処理を行うリスナーは「MouseListener」というものです。これをimplementsしたクラスを用意し、そのインスタンスをコンポーネントに「addMouseListener」というメソッドで組み込むことで、マウスを操作したら処理を実行させることができるようになります。

・マウスリスナーの定義
class クラス名 implements MouseListener {

  @Override
  public void mouseClicked(MouseEvent ev) { ……処理…… }

  @Override
  public void mouseEntered(MouseEvent ev) { ……処理…… }

  @Override
  public void mouseExited(MouseEvent ev) { ……処理…… }

  @Override
  public void mousePressed(MouseEvent ev) { ……処理…… }

  @Override
  public void mouseReleased(MouseEvent ev) { ……処理…… }
    
}


・マウスリスナーの組み込み
コンポーネント.addMouseListener( インスタンス );

ActionListenerだけしか知らなかった人には、いきなりずらずらとメソッド定義が出てきて驚いたかも知れません。マウスのイベント処理は「MouseListener」というインターフェイスとして用意されており、マウスイベントリスナーを作成するには、このMouseListenerをimplementsしたクラスを作成する必要があります。が、このMouseListenerには、全部で5つのメソッドが定義されているのです。

implementsでインターフェイスを組み込む際には、必ず「インターフェイスに用意されているすべてのメソッドを作成しなければいけない」というルールになっています。ですから、implements MouseListenerするクラスを作成する場合には、必要があってもなくても5つのメソッドすべてを用意しなければいけません。

マウスの状態など「イベントに関する情報」は、各メソッドの引数に渡されているMouseEventというクラスのインスタンスで得ることができます。とりあえずは、以下のようなメソッドを覚えておくだけでも十分役に立つでしょう。

Point 変数 = [MouseEvent].getPoint();
int 変数 = [MouseEvent].getX();
int 変数 = [MouseEvent].getY();
int 変数 = [MouseEvent].getClickCount();

それぞれ、「イベントが発生したマウスの位置(Pointインスタンス)」「横位置」「縦位置」「クリック回数」を返すメソッドになります。