マウスのイベント ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin
Expander等)を使って解凍して下さい。
マウスイベントを検出 マウスに関するイベントは、以下の7つを検出し、それぞれ対応するメソッドが呼び出されます。
此等のメソッドは、2つのリスナインターフェースの何れかに所属しています。 マウスイベントの処理一覧
| イベント |
メソッド |
リスナインターフェース |
アダプタクラス(注) |
| マウスボタンが押された |
mousePressed |
MouseListener |
MouseAdapter |
| マウスボタンが離された |
mouseReleased |
| マウスボタンがクリックされた |
mouseClicked |
| マウスが画面に入った |
mouseEntered |
| マウスが画面から出た |
mouseExited |
| マウスがドラッグされた |
mouseDragged |
MouseMotionListener |
MouseMotionAdapter |
| マウスが動いた |
mouseMoved |
マウスのボタンが押されて、同じ位置で離された時、クリックイベントが発生します。
其の為、1回のクリック操作で、 マウスボタンが押された
マウスボタンが離された
マウスボタンがクリックされた |
と言う3つのイベントが発生します。
一方、マウスのボタンが押された侭移動した時は、ドラッグイベントが発生します。
マウスボタンを押さずに、マウスを動かした時は「マウスが動いた」イベントが発生します。 MouseListenerのimplements 此処では、マウスのクリックを検出して円を描きます。
マウスがクリックされた時の処理は、MouseListenerインターフェースのメソッド「mouseClicked」に記述しますので、作成するクラスにMouseListenerをimplementsします。
此の時、MouseListenerインターフェースに登録されている全てのメソッドをオーバーライドしなければなりません。
例え、オーバーライドが必要なのが「mouseClicked」だけであったとしても全部です。 マウスイベントの登録 プログラムがマウスのイベントを検出出来る様にする為には、コンストラクタにマウスリスナを追加します。 此処では、同じクラスに「MouseListener」のメソッドをオーバーライドしたメソッドが有るので、引数は「this」になります。 public class Mouse1 extends Frame implements MouseListener{
/***********コンストラクタ************/
public Mouse1(){
;
:
:
}
mouseListenerのメソッドをオーバーライド
} |
マウスのイベント情報 マウスのイベントが発生した時に処理を記述するメソッドは、MouseEventクラスの引数を取ります。
此には、マウスのイベントに関する情報が詰まっています。
此の中、マウスのイベントが発生した「(x, y)」座標を求めるメソッドは、 です。
此等のメソッドで得られる座標が、描画する円の中心の座標になります。 Graphicsの取得と解放 イベント処理中に円を描きます。
図形を描画するのに必要なGraphicsクラスのオブジェクトは、 Graphics g = getGraphics(); |
で取得出来ます。
描画が終了したら、 で解放します。 中心「(x, y)」、半径「r」で有る円の描画 楕円を描くメソッド「drawOval」は、外接する四角形の左上の座標と幅と高さを引数とします。
此処では、中心の座標と半径を基に円を描くので、 g.drawOval(x-r, y-r, 2*r, 2*r); |
となります。 抽象クラス インターフェースをimplementsすると、不要のメソッド迄全てオーバーライドしなければなりません。
其処で、「MouseListener」をimplementsしただけのクラスが予め用意されています。
其れをアダプタと言いますが、イベントが発生した時は、各々のクラスで異なるので、「予め」と言う訳には往きません。
其処でアダプタでは、メソッドを定義するだけで内容は何も書かれておらず、必要な処理は各クラスでメソッドをオーバーライドして記述します。
此の様に、定義だけで処理が書かれていないクラスを抽象クラスと言います。
抽象クラスを継承したサブクラスでは、必要なメソッドだけをオーバーライドします。
抽象クラスと言えども「Frame」を継承しているクラスに、更に継承出来ません。
其処で、アダプタを継承した別のクラスを作成します。 マウスイベントの登録 アダプタを継承して作成する独自クラスは、此を利用するクラス特有の物なので、内部クラスにします。
此をインスタンス化した物を、addMouseListenerの実引数とします。 public class クラス名 extends Frame{
public クラス名(){
内部クラス名 オブジェクト名 = new 内部クラス名();
addMouseListener(オブジェクト名);
:
:
}
:
:
class 内部クラス extends アダプタ名(){
メソッドの定義
}
|
戻る |