作って覚えるJavaプログラミングのススメ 第5回
掌田 津耶乃 [著] 2008/02/21 14:00

今回は、ボタンをクリックしたときなどの処理を行うための「イベント処理」について説明します。Java特有の「代理イベントシステム」の基礎を理解しましょう。

1 2 3 4 →

はじめに

 多くのGUIを使ったプログラムでは、ユーザーの操作などに関する処理を「イベント」と呼ばれるものを利用して処理します。イベントというのは、さまざまなプログラムへのアクションに応じて発信される「信号」のようなものだと考えてください。例えば、ユーザーがマウスでボタンをクリックすると、それに対応するイベントが発生する。このイベントに応じて何らかの処理が実行される。そういう仕組みになっているわけです。

 GUIのプログラミングでは、このイベント処理が非常に重要となります。Javaに用意されているイベント処理の仕組みについて、ここでしっかりと理解しておきましょう。

対象読者

  • Javaに興味はある、けれどプログラミング経験がない、という人。
  • Javaに興味はある、けれど何から手をつければいいかわからない、という人。
  • Javaに興味はない、でも何でもいいからプログラミングをしたい、という人。

これまでの記事

Swingのイベントシステムとは?

 Swing(というよりJava全般)のイベントシステムは、一般に「代理イベント」方式(デリゲートイベント方式)と呼ばれています。イベントが発生したコンポーネントに代って、専用のクラスが処理を受け持つことからこう呼ばれています。

 イベント処理の基本は「イベントが発生すると、それに対応するメソッドが実行される」というものです。システムには、あらかじめ「こういうイベントが発生したら、このメソッドが呼び出される」というような処理の仕組みが組み込まれています。イベントに対応した処理をしたければ、それによって呼び出されるメソッドを用意し、その中に処理を記述しておけばよいわけです。

 しかし、この「コンポーネントの中に、イベントに対応するメソッドを用意しておく」というやり方は、すなわち「常にすべてのイベントが垂れ流されている」という状態であることになります。メソッドを書くだけでそれが呼び出されるということは、メソッドがあろうがなかろうが、常にすべてのイベントが発生し、「対応メソッドはないかな?」と探し続けているわけです。これはかなり無駄なやり方という気がします。また、後からイベントを追加するなどの拡張性にも乏しいと言えます。

 そこで、Swingではイベントの処理を行うための専用クラスを設け、これにイベント処理を代理させることにしました。コンポーネントでは、原則としてイベントは発生しません。イベント処理用のクラスがまったく組み込まれていない状態だと、何かイベントが発生しそうな操作をしても、そのコンポーネントではイベントが起こらないのです。そして、そのコンポーネントにイベント処理用のクラスを組み込むと、それに対応するイベントが発生するようになります。そしてイベントが発生したら、その処理用クラスに用意されているメソッドが呼び出される、というわけです。

 このイベントの処理を代理で行うクラスを「イベントリスナー」と言います。イベント処理を行う場合は、このイベントリスナーのクラスを定義し、そこに必要なメソッドを用意して処理を記述します。コンポーネントには、そのコンポーネントで利用可能なイベント用のイベントリスナーを組み込むためのメソッドが用意されており、これを使ってイベントリスナーのインスタンスを組み込みます。これで、そのコンポーネントでイベントが発生したら、組み込んだイベントリスナー内のメソッドが呼び出され、処理が実行されるようになるわけです。

Swingのコンポーネントでは、イベント処理のための「イベントリスナー」を組み込むと、そのイベントリスナーがイベント処理を代理で行うようになる。
Swingのコンポーネントでは、イベント処理のための「イベントリスナー」を組み込むと、そのイベントリスナーがイベント処理を代理で行うようになる。

プロフィール
掌田 津耶乃 ショウダ ツヤノ

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆活動をする傍ら、ログハウスの普及活動にいそしんでいる。(掌田津耶乃のWebサイトはこちら

※現在、新しい入門記事の投稿サイト「libro」を公開中。またGoogle+プロフィールはこちら


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト