JAVAプログラミング講座
宇宙のJAVAさん


- 第1話 -
JDK1.1ニューイベントモデルでのイベントの受け取り方(健全)


< 一年前 >

うし君 JAVAが最終防衛ライン突破! 迎撃、間に合いません!

みゃあ OS不安定により、システムの安定率 65%に減少!

くま様 ・・・

くま様 これまでか・・・

うし君 レ、レーダに捕捉! JAVAです!

 

悪 (どよ〜ん)

 

くま様 く・・・ 仕方ない。 みんなは逃げなさい。

うし君 先生!

みゃあ どうするみゃ?

くま様 私が持てる全てのプログラミング技術を駆使して、奴に負荷をかけよう!

くま様 多重スレッドだ!

くま様 とぉ!

 

みゃあうし君 先生ぇえええええええええええええ!

 

第2部の壮絶な死闘とともに、このコーナーの更新も止まった。
こうしてJAVAとともに宇宙(そら)のチリとなったクマ先生。
しかし、プログラミング魂がある限り、クマ先生はみんなの心の中に生きつづけるだろう・・・

 


< そして、現在 >

 

みゃあ JAVA接近中? 間違いないのかみゃ?

うし君 コンピュータの予想では、99.954%の確率でJAVAだも〜

みゃあ どうするみゃ?

うし君 こんな時に「クマ先生」がいてくれたらな・・・

うし君 大体、第2部の最後でJAVAとの死闘なんてあったかも?

うし君 いつの間に先生が宇宙のチリになっているだも? 設定がいい加減だも〜

みゃあ なにせ爆裂健だからね・・・ 作ってるのが・・・

みゃあ しかしどうするみゃ?

 

ふははははは・・・・

 

みゃあうし君 この声は!

エボリューダー・クマ バーン!

みゃあうし君 クマ先生!

エボリューダー・クマ みんな、久しぶり。 1年半ぶりぐらいかな?

みゃあ 生きてたのかみゃ? クマ先生!

エボリューダー・クマ Gストーンの力により、「エボリューダー・クマ」としてよみがえったんだ!

エボリューダー・クマ これからは、きらめく稲妻 エボリューダー・クマ と呼んでくれたまえ!

うし君 しかし、全然変わっていない気がするも〜

エボリューダー・クマ あまいな、うし君。 下の写真が昔の私だ!

旧・クマ先生

エボリューダー・クマ そして私が、きらめく稲妻 エボリューダー・クマ だ!

みゃあ 同じに見えるみゃ?

エボリューダー・クマ 「ハナ」をよく見たまえ! エボリューダー・クマ はハナが3ドットほど光っているだろう。

うし君 ザナドゥポーション並に、わかりずらいのですが・・・

エボリューダー・クマ と、とにかく! 再び講座を始めます。

うし君みゃあ はーい!

 


 

エボ・クマ さて、新シリーズ第1話は、「JAVAニューイベントモデル」についての勉強です。

エボ・クマ 第一部の STORY1 で勉強した「メッセージハンドラ(イベント駆動)」は覚えていますか?

うし君 マウスを押したり、再作画の時に、決められた関数が実行される事だも〜

エボ・クマ そうです、たとえばマウスが押された時は 関数
public boolean mouseDown(Event e, int x, int y) { // マウスダウン
が、 実行されます。

エボ・クマ ところが、JDK1.1以降、イベント駆動のやり方が少し変わりました。
もちろん昔のイベント駆動のやり方も使えます。
ただ注意点は、昔のイベント処理のやり方と新しいイベント処理のやり方を1つのソースの中で同時に使うことは出来ません。

エボ・クマ 友人から「新しいイベント処理のやり方を紹介しろ!」と言われたので、JDK1.1イベント処理について勉強しましょう。

エボ・クマ そんな訳で「新しいイベント処理の雛型」をダウンロードしてください。

 javabase11.lzh  (2000.09.15.公開)

javabase11.lzh という名前でLHA圧縮されてますので、c:ドライブに sora というフォルダを作ってそこに展開してください。

みゃあ 第一部の時と、まったくいっしょにゃ

エボ・クマ JavaBase11.java というファイルがアプレット雛型ソースファイルです。
これにプログラムを書き込み、コンパイルして sample.html で動かします。
やり方を忘れてしまった人は、第一部を読み直してください。

みゃあ JavaBase11t.javasample_t.html というファイルもあるにゃ??

エボ・クマ それらは、「スレッドプログラム用の雛型ソース」です。
スレッドプログラムを作るときは、こちらを使います。

エボ・クマ   これが「新しいイベント処理の雛型」です。

エボ・クマ   これが古いイベントモデルです。 比べてみてください。

うし君 あれ? 「マウスダウン関数」とか「マウスアップ関数」が、自分で新たに定義されたクラスの中に入っているも〜

エボ・クマ そうです。 簡単に言うとプログラムする場所が変わりました。

みゃあ あれ? コンパイルしたら「JavaBase11.class」の他に、「JavaBase11$MouseAction.class」というファイルもできたにゃ!

エボ・クマ そのとおり。 新しいイベントモデルでは、イベントの種類ごとに複数のクラスを作ります。
実行する時は、それら複数のクラスが全部無いと動きません。

ちなみにこの雛型は「マウス処理イベント」だけが追加されています。
よって、、「JavaBase11$MouseAction.class」というのは、マウス処理プログラム部分です。

本格的なプログラムでは、いろいろな種類のイベントを追加するので、コンパイルすると大量のクラスファイルが出来ます。

みゃあ 昔のイベントモデルは、コンパイルすると1つのクラスファイルしか作らなかったのに・・・
これって不便なんじゃないかみゃ?
なんで、新しいイベントモデルになったのかみゃ?

エボ・クマ カッコイイからだよ!

うし君 ・・・

エボ・クマ 簡単に言うと、イベント処理がより洗練されたんです。
私はJAVAでゲームを作ることが多いから、マウスイベントぐらいしか使わないのですが、本格的な業務ソフトなどを作るときに、ボタンやテキストフィールドなどのコンポーネントを利用します。
昔のイベントモデルでは、ボタンなどのコンポーネントのイベントが発生すると、action() 関数が実行されていました。
で、action() 関数の中で、なんのコンポーネントが実行されたのかチェックして、処理を分岐させていたんです。
つまり(マウス処理以外の)全てのイベント処理プログラムを action() に集まって、ごじゃごじゃしていたわけです。
これは、(プログラム的に)非常に美しくない!
ついでにプログラムが複雑になると、わかりづらい!
そんなわけで、悪の SUN王国が新しいイベント処理モデルをJDK1.1に追加したわけです。

エボ・クマ 新しいイベントモデルでは、すべてのイベント処理が登録制になったんですよ。
いままでは「MouseDown()」 とプログラムすれば、マウスを押した時にこの関数が呼ばれ実行されました。
新しいイベントモデルはイベントの種類ごとに Listener インターフェイスを登録(実装)してイベントを使うわけです。

みゃあ みゃ? みゃ? みゃ? よくわからんみゃ?

エボ・クマ 具体的に説明しましょう。 例えば「ボタンが2つあるプログラム」をつくるとします。
昔のイベント処理では、ボタンが押されたら、どのボタンが押されても action() が実行されます。

  このような動作とソースファイルになります。

エボ・クマ 新しいイベント処理では、ボタンごとに実行されるプログラムを設定&登録します。

  このような動作とソースファイルになります。

エボ・クマ 上のプログラムのダウンロードしたい場合は、 です。

うし君 なるほど、すべてのボタン(=コンポーネント)が個別に実行関数持ってるわけも〜

みゃあ わかったようみゃ・・・ わからないようにゃ・・・

エボ・クマ まぁ、いろいろ考える必要はありません!

プログラムを書き込む場所が変わっただけです。

うし君 いいのかも〜 そんないい加減で・・・

エボ・クマ クマですから・・・

エボ・クマ 第一部 STORY3 で紹介した「マウスをクリックすると文字が出るプログラム」は覚えていますか?

うし君 覚えているも〜 これだも〜  

エボ・クマ それを新しいイベント処理のプログラムにすると、こうなります!  

 

エボ・クマ どうです? プログラミングする場所が変わっているだけでしょ・・・
プログラムの内容は、まったく同じになってます。

 

みゃあ 結局、どっちのモデルが良いんだみゃ?

エボ・クマ まぁ、普通に考えれば新しい方がいいのですが、ちょっとしたプログラムを個人で作成する場合は古いイベントモデルで作った方が作りやすいです。
本格的なプログラムの場合は新しい方かな・・・ やはり。
Visual J++ や Visual Cafe などの市販の開発ツールでは、当然新しい方を使っています。
まぁ、どっちで覚えても大差ありません。気楽に行きましょう。

エボ・クマ いちおうこのJAVA講座では、今後は新しいイベントモデルで話を進めていきます(予定)。

エボ・クマ では、また次回お会いしましょう!

うし君みゃあ はーい!

 

- 第2話につづく -


宇宙のJAVAさん (C) BakuretuKen 2000

戻る