目次

アプレットなJavaの基礎講座

イベント処理

◆ イベント処理

ボタン、ラベル等のGUI部品は、カンタンにできました。しかし、表示だけで何の機能もありません。
そこで、マウスでクリックしたらと云うイベント処理を加えましょう。

◆ イベント処理のサンプル

以下は、ボタンをクリックすると画像が交互の替わるアプレットです。
まずは、サンプルソースを見てください。

jlearn06.javaの内容

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class jlearn06 extends Applet{
        Button btn_ore;
        Image Img_ore1;
        Image Img_ore2;
        int fg;
        public void init(){
                add(btn_ore = new Button(" クリックするとちゃいちゃんが替わるよ! "));
                btn_ore.addActionListener(new ActionListener() {        // (1)
                        public void actionPerformed(ActionEvent e){     // (2)
                               fg++;                                   
                               repaint();
                        }
                });
                Img_ore1 = getImage(getDocumentBase(), "../img/chaichan.gif");
                Img_ore2 = getImage(getDocumentBase(), "../img/chaikobana.gif");
                fg = 0;
        }
        public void paint(Graphics g){
                if (fg % 2 == 0){                  
                    g.drawImage(Img_ore1, 80, 80, this);
                }
                else{
                    g.drawImage(Img_ore2, 80, 80, this);
                }
         }
}

上記で、目新しいのは、(1)と(2)です。

(1)は、ボタンインスタンス btn_ore のaddActionListenerメソッドを起動しています。 これをすることにより、イベント処理が可能になります。 また、addActionListenerメソッドの引数には、ActionListenerクラス(実はインターフェイス)のインスタンス(インターフェイスを継承した)が必要です。

(2)は、ActionListenerインターフェイスのactionPerformedメソッドを実装しています。

補足:匿名クラス

上記のようにaddActionListenerメソッドの引数は、ActionListenerインターフェイスを継承したクラスのインスタンスです。

しかし、そのインスタンスは、以下のように記述されています。

                new ActionListener() {
                        public void actionPerformed(ActionEvent e){
                               fg++;                                   
                               repaint();
                        }
                    }

そして、このように記述されるインスタンスの元クラスを匿名クラスと云います。

つまり、架空ですが以下のようなことを上記は、簡素に表現しているのです。

                 new 匿名();
                 public class 匿名 implements ActionListener{
                        public void actionPerformed(ActionEvent e){
                               fg++;                                   
                               repaint();
                        }
                 }

これでイベント処理用のクラス(リスナクラス)のインスタンスができました。

JavaではGUIコントロールでイベントが起こると、そのコントロールと関連付けされたイベント処理用のクラスのメソッドが呼び出されて起動されます。

その関連付けを行うのが、このインスタンスを引数としたaddActionListenerメソッドの起動です。

今回は、ボタンをクリックするとaddActionListenerメソッドで関連付けられたこの匿名クラスのインスタンスが起動され、fgをインクリメントし、再表示(repaint();)が行われます。

尚、『ActionEvent e』は、actionPerformed()の引数ですが、今回は使用していません。ちなみに、アクションに関連したコマンド文字列やタイムスタンプ等を得るメソッドを持っています。

◆ MS-DOSプロンプトからそのソースをコンパイルします。

ソースファイルが完成したら、MS-DOSプロンプトからそのソースをコンパイルします

D:\javalean>javac jlearn06.java
D:\javalean>dir /B
jlearn06.java
jlearn06.class

◆ APPLETタグで本クラスを指定したHTMLファイル(jleran06.htm)作成します。

jlearn06.htmの内容

<HTML>
<BODY>
<APPLET CODEBASE="../applet/" CODE="jlearn06.class" WIDTH="300" HEIGHT="300">
</APPLET>
</BODY>
</HTML>

        CODEBASE属性は、jlearn06.classとjlearn06.htmが同じフォルダーにあれば不要です。
        また、CODEBASE属性を指定しない場合、セキュリティ上の理由で参照可能なフォルダーは、
        現在の文書が含まれているフォルダーのサブフォルダーのみです。

さぁ! 6回目のAです。クリックしてアプレットを体験してください。

目次