Javaプログラミング/Javaの基本

マウスとキーボードのイベント処理(3ページ目)

今回は、GUIアプリケーションで必要となるマウスとキーボードのイベント処理について説明しましょう。

執筆者:掌田 津耶乃

アダプタークラスを使う


それにしても、ここではマウスをクリックしたときの処理をするmouseClickしか使っていないのに、いちいち5つのメソッドすべてをイベントリスナーに用意しなければいけません。毎回、これをやるのは正直、面倒です。

そこでJavaのクラスライブラリには、あらかじめイベントリスナーをimplementsしておいたクラスも用意されています。これは「アダプタクラス」と呼ばれるものです。これをextendsしてイベント処理を用意すれば、もっと簡単にイベント処理が作成できます。

public class SampleApp extends Frame {
  private ArrayList list;

  public static void main(String[] args) {
    new SampleApp().setVisible(true);
  }
  
  public SampleApp(){
    list = new ArrayList();
    this.addMouseListener(new MyMouseAdapter());
    this.setSize(300,300);
  }
  
  public void paint(Graphics g){
    g.setColor(Color.RED);
    for(Point p : list){
      g.fillOval(p.x - 10, p.y - 10, 20, 20);
    }
  }
  
  class MyMouseAdapter extends MouseAdapter {
    
    @Override
    public void mouseClicked(MouseEvent ev) {
      Point p = ev.getPoint();
      list.add(p);
      repaint();
    }
  }
  
}


package/import文は省略しました。これは、先ほどの例を、アダプタクラス利用の形に書き換えたものです。イベント処理をするMyMouseAdapterクラスを見てください。不必要なメソッドが消え、非常にシンプルになっていることがわかるでしょう。

「だったら、全部アダプタクラスを使うようにすればいいじゃないか」と思った人。そういうわけにもいかないのです。アダプタクラスはインターフェイスではなく普通のクラスですから、継承して新しいクラスを作る必要があります。ということは、既に何かのクラスを継承しているクラスでは使えない、ということになります。例えば、extends Frameしているクラスにイベント処理も持たせたい場合、「class ○○ extends Frame implements ○○Listener」といった具合にして1つのクラスですべてをまとめることができますが、アダプタクラスではそうはいきません。必ずイベント処理クラスを別に作る必要があります。

イベントリスナーとアダプタクラス、どちらがよいというわけではなく、場合によって使い分けるものだ、と考えるとよいでしょう。
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 5
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます