イベントリスナー
日本語 | 聞く人 |
英語 | event listener |
ふりがな | いべんとりすなー |
フリガナ | イベントリスナー |
何らかのイベントが発生した場合に呼ばれるメソッドを持つクラス。
「キーが入力された」「マウスがクリックされた」といった「イベント」が発生する場合、そのイベントに対応する処理をするためのメソッドを用意する必要がある。そのメソッドを持つクラスが「イベントリスナー」である。
ウィンドウのようなGUIでは、ユーザーの操作に対応した処理をプログラムする必要がある。だが、その処理をプログラミングするために全体を作り直していては無駄になる。
そこで、ライブラリ側はイベントに対応するメソッドを持つインターフェイスを作り、ウィンドウ側のクラスにこのインターフェイスの実装クラスを渡せるようにしておく。プログラマーはそのインターフェイスをオーバーライドしたメソッドを実装したクラスを作り、このクラスのインスタンスへの参照を渡すことで、イベントが発生した際にオーバーライドしたメソッドが呼び出される。つまり、ポリモーフィズムを利用することで「イベントの処理をするメソッドのみを作る」ようにしているわけである。
これがイベントリスナーの仕組みであり、元々用意してある「イベントに対応するメソッドを持つインターフェイス」もしくはその実装クラスを「イベントリスナー」と呼ぶ。
たとえばアプレットでマウスイベントを処理する場合、MouseListenerインターフェイスの実装クラスを作る。このインターフェイスはマウスのイベントに対応したmouseClicked()メソッド等を持つため、実装クラスではこれらのメソッドをオーバーライドする。
このクラスをAppletクラスのaddMouseListener()メソッドに渡すことで、マウスイベントが発生した際にオーバーライドしたメソッドが呼び出される。
「キーが入力された」「マウスがクリックされた」といった「イベント」が発生する場合、そのイベントに対応する処理をするためのメソッドを用意する必要がある。そのメソッドを持つクラスが「イベントリスナー」である。
ウィンドウのようなGUIでは、ユーザーの操作に対応した処理をプログラムする必要がある。だが、その処理をプログラミングするために全体を作り直していては無駄になる。
そこで、ライブラリ側はイベントに対応するメソッドを持つインターフェイスを作り、ウィンドウ側のクラスにこのインターフェイスの実装クラスを渡せるようにしておく。プログラマーはそのインターフェイスをオーバーライドしたメソッドを実装したクラスを作り、このクラスのインスタンスへの参照を渡すことで、イベントが発生した際にオーバーライドしたメソッドが呼び出される。つまり、ポリモーフィズムを利用することで「イベントの処理をするメソッドのみを作る」ようにしているわけである。
これがイベントリスナーの仕組みであり、元々用意してある「イベントに対応するメソッドを持つインターフェイス」もしくはその実装クラスを「イベントリスナー」と呼ぶ。
たとえばアプレットでマウスイベントを処理する場合、MouseListenerインターフェイスの実装クラスを作る。このインターフェイスはマウスのイベントに対応したmouseClicked()メソッド等を持つため、実装クラスではこれらのメソッドをオーバーライドする。
このクラスをAppletクラスのaddMouseListener()メソッドに渡すことで、マウスイベントが発生した際にオーバーライドしたメソッドが呼び出される。
参考サイト
// Sample.java
import java.applet.Applet;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
/**
* Eclipseで試す場合には、「デバッグ」の
* 「Java Applet」として新規に作成してください。
*/
public class Sample extends Applet
{
/**
* アプレットが起動した時に呼ばれます。
*/
public void init()
{
System.out.println( "Sample#init()" );
// マウスイベントを受け取るイベントリスナーを追加します。
addMouseListener( new NormalMouseListener() );
}
/**
* アプレットが閉じられた時に呼ばれます。
*/
public void destroy()
{
System.out.println( "Sample#destroy()" );
}
/**
* アプレットがアクティブになった時に呼ばれます。
*/
public void start()
{
System.out.println( "Sample#start()" );
}
/**
* アプレットが非アクティブになった時に呼ばれます。
*/
public void stop()
{
System.out.println( "Sample#stop()" );
}
}
/**
* マウスイベントリスナー
* これが、マウスイベントを受け取るイベントリスナーです。
*/
class NormalMouseListener implements MouseListener
{
/**
* クリックされました。
*/
public void mouseClicked( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseClicked()" );
}
/**
* 押されました。
*/
public void mousePressed( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mousePressed()" );
}
/**
* 離されました。
*/
public void mouseReleased( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseReleased()" );
}
/**
* マウスカーソルが入りました。
*/
public void mouseEntered( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseEntered()" );
}
/**
* マウスカーソルが出ました。
*/
public void mouseExited( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseExited()" );
}
}
import java.applet.Applet;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
/**
* Eclipseで試す場合には、「デバッグ」の
* 「Java Applet」として新規に作成してください。
*/
public class Sample extends Applet
{
/**
* アプレットが起動した時に呼ばれます。
*/
public void init()
{
System.out.println( "Sample#init()" );
// マウスイベントを受け取るイベントリスナーを追加します。
addMouseListener( new NormalMouseListener() );
}
/**
* アプレットが閉じられた時に呼ばれます。
*/
public void destroy()
{
System.out.println( "Sample#destroy()" );
}
/**
* アプレットがアクティブになった時に呼ばれます。
*/
public void start()
{
System.out.println( "Sample#start()" );
}
/**
* アプレットが非アクティブになった時に呼ばれます。
*/
public void stop()
{
System.out.println( "Sample#stop()" );
}
}
/**
* マウスイベントリスナー
* これが、マウスイベントを受け取るイベントリスナーです。
*/
class NormalMouseListener implements MouseListener
{
/**
* クリックされました。
*/
public void mouseClicked( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseClicked()" );
}
/**
* 押されました。
*/
public void mousePressed( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mousePressed()" );
}
/**
* 離されました。
*/
public void mouseReleased( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseReleased()" );
}
/**
* マウスカーソルが入りました。
*/
public void mouseEntered( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseEntered()" );
}
/**
* マウスカーソルが出ました。
*/
public void mouseExited( MouseEvent mouseEvent )
{
System.out.println( "NormalMouseListener#mouseExited()" );
}
}
// Sample.java import java.applet.Applet; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; /** * Eclipseで試す場合には、「デバッグ」の * 「Java Applet」として新規に作成してください。 */ public class Sample extends Applet { /** * アプレットが起動した時に呼ばれます。 */ public void init() { System.out.println( "Sample#init()" ); // マウスイベントを受け取るイベントリスナーを追加します。 addMouseListener( new NormalMouseListener() ); } /** * アプレットが閉じられた時に呼ばれます。 */ public void destroy() { System.out.println( "Sample#destroy()" ); } /** * アプレットがアクティブになった時に呼ばれます。 */ public void start() { System.out.println( "Sample#start()" ); } /** * アプレットが非アクティブになった時に呼ばれます。 */ public void stop() { System.out.println( "Sample#stop()" ); } } /** * マウスイベントリスナー * これが、マウスイベントを受け取るイベントリスナーです。 */ class NormalMouseListener implements MouseListener { /** * クリックされました。 */ public void mouseClicked( MouseEvent mouseEvent ) { System.out.println( "NormalMouseListener#mouseClicked()" ); } /** * 押されました。 */ public void mousePressed( MouseEvent mouseEvent ) { System.out.println( "NormalMouseListener#mousePressed()" ); } /** * 離されました。 */ public void mouseReleased( MouseEvent mouseEvent ) { System.out.println( "NormalMouseListener#mouseReleased()" ); } /** * マウスカーソルが入りました。 */ public void mouseEntered( MouseEvent mouseEvent ) { System.out.println( "NormalMouseListener#mouseEntered()" ); } /** * マウスカーソルが出ました。 */ public void mouseExited( MouseEvent mouseEvent ) { System.out.println( "NormalMouseListener#mouseExited()" ); } }