イベントとリスナーについて折角お話したので、コンポーネントからはちょっと外れますがマウスからの入力の受け取り方とその処理方法について紹介しておきましょう。いままでと同様に、イベントをリスナーで受け取るという方式です。
画面上のクリックされた点に小円を描くというプログラムを作成してみましょう。
Sample35.java
01|/* <applet code="Sample35.class" width="120" height="120"></applet> */
02|import java.applet.Applet;
03|import java.awt.*;
04|import java.awt.event.*;
05|
06|public class Sample35 extends Applet
07| implements MouseListener
08|{
09| // 描画される球の半径
10| int radius = 3;
11| // 直前にクリックされた点を保持する変数
12| Point p;
13|
14| public void init(){
15| // p を初期化
16| this.p = new Point( 0, 0);
17| // マウスリスナーにアプレットを登録
18| this.addMouseListener( this);
19| }
20|
21| /*
22| * 描画処理を行う。
23| * @see java.applet.Applet#paint(Graphics)
24| */
25| public void paint( Graphics g){
26| g.setColor( Color.BLACK);
27| g.fillOval( p.x - radius, p.y - radius, 2*radius, 2*radius);
28| }
29|
30| public void mouseClicked( MouseEvent ev){
31| this.p = ev.getPoint();
32| this.repaint();
33| }
34|
35| public void mouseEntered( MouseEvent ev){
36| }
37|
38| public void mouseExited( MouseEvent ev){
39| }
40|
41| public void mousePressed( MouseEvent ev){
42| }
43|
44| public void mouseReleased( MouseEvent ev){
45| }
46|}
7行目はMouseListenerを実装しています。18行目でアプレット自身をマウスリスナーに登録しています。これは Sample35ではマウスイベントが発生するのがアプレット自分自身だからです。自分から発生したイベントを自分自身で受け取ることになりますね。30行目から45行目は MouseListener インタフェースで宣言されているメソッドを定義しています。それぞれがどのようなときに呼ばれるメソッドなのかは表13にまとめました。
| メソッド | 説明 |
|---|---|
| mouseClicked | コンポーネント上でマウスボタンをクリック (押してから離す) したときに呼び出されます。 |
| mouseEntered | コンポーネントにマウスが入ると呼び出されます。 |
| mouseExited | コンポーネントからマウスが出ると呼び出されます。 |
| mousePressed | コンポーネント上でマウスボタンが押されると呼び出されます。 |
| mouseReleased | コンポーネント上でマウスボタンが離されると呼び出されます。 |
インタフェースで5個のメソッドが定義されているので、このインタフェースを実装すると(特にさせることがなくとも)必ず5個のメソッドを定義してやらなければなりません。これは面倒で、このような記述を回避する方法もありますが、イベントとリスナーという話からはずれてしまうので、ここでは触れないことにします。
最終更新時間:2011年01月08日 18時47分42秒