よく登場するインターフェイス

Javaのプログラムでしばしば利用されるインターフェイスの実例です。 スレッドを取り扱う機能を提供する Runnable と JDK1.1の新しいイベントモデル でマウスのイベント処理の機能を提供する MouseListener を使ってみましょう。
Runnable は java.lang パッケージに含まれています。アプレットで アニメーションなどを実現する場合にも登場します。 Runnable は次のように run() という名前のメッソドを abstract に定義します。

public interface Runnable {

       public void run(); // インターフェイスなのでabstract修飾子は省略可
}

これだけです。 実際に必要な作業の大半は Runnableが実装されるクラスの側が行います。 たとえば、Threadクラスのオブジェクトを生成するのも、実装側の仕事です。

import java.awt.Frame;
import java.awt.Color;

/** 様々に色が変化する ColorfulFrameクラス */

public class ColorfulFrame extends Frame implements Runnable {

  /** スレッド */

       public Thread thread;

  /** 色のデータの表 */

       protected Color colors[];

  /** カウンタ */

       private int count=0;

  /** コンストラクタ */

       ColorfulFrame( int width, int height ) {

              super();

              colors = new Color[7];
              colors[0] = Color.red;    colors[1] = Color.orange;
              colors[2] = Color.yellow; colors[3] = Color.green;
              colors[4] = Color.cyan;   colors[5] = Color.blue;
              colors[6] = Color.magenta;

              thread = new Thread( this );  //スレッドの生成

              setSize( width, height );     // JDK1.0 では resize()
              setBackground( colors[0] );
              show();
       }

  /** スレッドによって実行される仕事 */

       public void run() {

              while( thread.isAlive() ) {

                    try {
                          Thread.sleep(1000); // 一秒間停止
                    } catch(Exception e) {/* 本当は処理が必要 */}
                    setBackground( colors[count] );
                    count++;
                    if( count > 6 ) count=0;
              }
       }
}

この例は、Frameクラスをベースにして、時間によって色が変化するウィンドウ を表示します。

           thread = new Thread( this );

の行がポイントになります。this はこのクラス自身を表しますが、 Runnable がインプリメントされていない (Runnableを継承していないと)とコンパイル時にエラーとなります。

MouseListener は java.awt.eventパッケージに含まれています。 このパッケージ内には MouseListener 以外にもイベントの種類に応じて リスナのインターフェイスが用意されています。 MouseListener の場合、マウスボタンの上下とポインタのウィンドウからの出入り を処理する全部で5個の abstract メソッドが含まれています。 したがって、MouseListenerをインプリメントするクラスは、 必ずこれらのメソッドのすべてを (たとえ使用しなくとも)実装しなくてはいけません。


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

/** マウスの出入を感知する SensitiveFrameクラス */

public class SensitiveFrame extends Frame implements MouseListener {

  /** コンストラクタ */

       SensitiveFrame( int width, int height ) {

              super();

              setSize( width, height );    // JDK1.0 では resize()
              addMouseListener( this );    // 自分自身を登録
              show();
       }

  /** MouseListener の実装 */

       public void mouseEntered( MouseEvent evt ) {

              setBackground( Color.red );
       }
       public void mouseExited( MouseEvent evt ) {

              setBackground( Color.white );
       }
       public void mouseClicked( MouseEvent evt ) {
              /** 形式上必要 */
       }
       public void mousePressed( MouseEvent evt ) {
              /** 形式上必要 */
       }
       public void mouseReleased( MouseEvent evt ) {
              /** 形式上必要 */
       }
}