next up previous contents
Next: Adapterの利用 Up: JDK1.1のイベント・モデル Previous: Listener の導入

新しいイベント・クラス

サンプル3のイベント処理のスタイルは、Listenerの登録部分を除けば、 先に見た、サンプル2のComponent毎のイベント処理に似ているところがあります。 確かに、Comonent毎に処理が分かれているのは同じですが、サンプル2では、 拡大されたComponentの内部でイベント処理が行われているのに対して、 サンプル3では、イベント処理は、Componentとは独立な、Listenerを実装した 新しいクラスの中で行われています。ですから、処理のためにComponentを拡大 する必要もなくなっています。ButtonはButtonのままで、拡大Buttonではありません。

もう一つ、大事な違いがあります。サンプル2では、Componentに渡されるイベントは、 全て、同一のEvent クラスに属するそのインスタンスです。これは、サンプル1でも 同じです。 ところがサンプル3では、Listener毎に渡されるイベントの型が 異なっています。

ActionEventやItemEventといった、新しいイベント・クラスは、これも何故かjava.util パッケージに属する、EventObjectを共通の祖先として持っていて、java.awt.event パッケージに含まれています。以前のJDK1.0と新しいJDK1.1でのイベント・モデル では、イベントのクラスそのものが異なるのです。

あらかじめJDK1.1で用意されているイベントの名前を、全部挙げることはしませんが、 先に示した、ListenerやAdapterのリストから容易に、類推することが出来ます。

ComponentEvent -> ComponentListener -> ComponentAdapter -> addComponentListener
ActionEvent    -> ActionListener    ->      な し       -> addActionListener

こんな具合です。名前のシステマティックな整理は、概念を整理するにも役立ちます。 この系列が、Adapterクラスがあるものと無いものの二つの系列に分かれていることに 気づいたと思います。この二つの系列は、JDK1.1のイベントが、MouseMotionEvent等の 低レベルのイベントと、ActionEvent等の抽象度の高いイベント(「Semantic な イベント」という言い方がされます)等の、大きく二つのグループに分けられることに 対応しています。



maruyama@wakhok.ac.jp