7-1:GUIとイベント駆動型プログラミング


・ ウィンドウ上のアプリケーションは、 GUI(Graphical User Interface)の考え方に基づいて設計されます。 これは一世代前の文字入力中心のアプリケーションとは根本的に異なる点です。 GUIはグラフィックの表示によってユーザーに対して情報を表示し、 ユーザーは主にマウスの操作によって必要な処理を選択していきます。 GUIによってコンピュータの操作がわかりやすくなり、 初心者にも簡単に理解できるようになりました。


GUI による対話的処理

その一方で、 アプリケーションの側にはいくつかの制限や新しい機能が要求されます。 ウィンドウシステム上のアプリケーションでは、 以下のような点を考慮しなくてはいけません。

・ 上に述べたようにウィンドウ上のアプリケーションでは、 従来のプログラムとは違ったプログラミング・スタイルが要求されます。 プログラムの各処理は呼び出される順序を、あらかじめ予測することができません。 ユーザーの「気まぐれな」操作に依存するからです。 ウィンドウ上のプログラミングでは、 ユーザーからの入力のことを「イベント」という概念で取り扱います。 プログラムの処理は、 ユーザーの操作によって発生するイベントを中心にして処理されます。 このようなスタイルは、「イベント駆動型」と呼ばれます。
ウィンドウ上のアプリケーションは、 最初にまずデータの生成など必要な準備を行いますが、 その後は決められた処理の手順というものを持ちません。 その代わりにイベントを受け付けるための無限ループに入ります。 目的のイベント、たとえば「マウスボタンのクリック」を検出すると それに応じてあらかじめ用意された処理、 たとえば「色の変更」などの処理が実行される仕組みになっています。 このスタイルは、 ちょうどレストランや喫茶店の仕事を思い浮かべるといいでしょう。 いつ来るかわからないお客さん(イベント)を待ち続け、 注文があった時にその注文に合った仕事をしなくてはいけません。 それぞれの仕事をあらかじめ「メニュー」として準備する点も同じです。
ただし java.awtのコンポーネント(ウィンドウのオブジェクト)では、 イベント処理のループは独立したスレッドが担当します。 したがって、プログラムの表面には「無限ループ」の形式は登場しません。 プログラマがいちいち記述する必要はないわけです。

・ マウスやキーボードなどの入力処理だけでなく、 グラフィック表示に関しても特別な配慮が必要です。 ウィンドウ上のアプリケーションは、 他のアプリケーションと画面上で競合します。 ユーザーの操作によって、画面上のウィンドウの重なり合ったり アイコン化の操作を受けるかもしれません。 そのため予想できないタイミングでウィンドウの再描画の要求が発生します。 これらの処理も一種の「イベント」として取り扱うのが普通です。 JDKのコンポーネントでは paint()メソッドを用意し、 画面の書き直しの要求が発生すると 自動的にその内容を描画し直すことができる仕組みになっています。