libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

その他のGUI部品 (4/6)

作成:2010-01-14 16:20
更新:2010-01-14 16:20

■アイテムリスナーの働き

チョイスは「Choice」、リストは「List」というクラスとして用意されています。これらはnewでインスタンスを作った後、こんな作業をしていますね。

c1.add("MacOS");

このようにaddを使って、表示する項目を組み込んでやらないといけないのです。でないと、何も表示されませんからね。このへんが他の部品とちょっと違うところですね。自分の中にたくさんの項目をもっているわけですから。

さて、後は実をいうとそう大きな違いはありません。見ると、選択した時のイベント処理はチェックボックスと同じ「アイテムリスナー」ですね。 ということは、itemStateChangedメソッドに処理を用意しておけばいいわけです。

今回は、2つの部品(チョイスとリスト)のそれぞれで変更した時に異なる処理をさせようと思います。ってことは、itemStateChangedメソッド内で「どれがイベント発生した部品か」をチェックして処理するようにしておきたい、ということです。

これを行なっているのが、メソッド内にあるif文です。「if (ev.getSource() == c1) { …」なんて感じで書いてあるでしょう?

このevってのは、パラメータで送られてくるやつですね。メソッドの最初を見ると「itemStateChanged(ItemEvent ev)」ってあるでしょう? つまり、ItemEventのインスタンスをevに入れて渡しますよ、ってことになります。

○イベントとは?○
イベントリスナーにあるメソッドは、どれもこんな具合に何かのインスタンスをパラメータで渡します。actionPerformedも、そういえば「actionPerformed(ActionEvent ev)」ってなってましたね。これは一体、なんでしょう?

これが、要するに「イベントの正体」なのだ、と考えるとよいでしょう。今まで「イベント処理」なんて何も考えずにいってましたけど、「イベント」って何でしょう? 宇多田ヒカルのコンサートみたいなやつですか? そんなわけないですよね。

要するに、「ユーザが操作した部品、マウスの場所、その時のキーボードの状態、操作の種類」といった様々な操作の情報をひとまとめにしてある状況の時にシステムに送ること、それが「イベントの発生」なわけです。「これこれこういう状況の動作が起きたよ」という信号なわけですね。

そして、その「様々な情報をまとめたもの」が、パラメータに送られてくるActionEventやItemEventのインスタンスなのでした。従って、この中身を調べれば、どんな部品でどういう状況でイベントが発生したのか、知ることができるはずなのです。

ここでは「ev.getSource()」というものを使っていますね。このgetSource()は、イベント発生源となる部品のインスタンスを示すメソッドです。だから、これがc1ならば、c1(つまりチョイス)でイベントが発生したってことがわかるのですね。――では、やっている処理を見てみましょう。(下リスト参照)

まず、c1(チョイス)の場合は、「c1.getSelectedIndex()」というものの値を取り出し、「l1.select()」というものでその値を設定しています。getSelectedIndex()というのは、現在選択されている項目の番号を返すメソッドで、selectはパラメータで指定した番号の項目を選択するメソッドです。つまり、これでc1と同じ項目をl1で選択させていたわけですね。

そしてl1(リスト)では、「l1.getSelectedItem()」というのを調べて、その値をラベルに設定しています。このメソッドは、選択されている項目のテキストを取り出すものです。このぐらいのメソッドを覚えておけば、とりあえず「選択された項目を調べたり変更したりする」という基本的な操作はできるようになるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

			if (ev.getSource() == c1) {
				int n = c1.getSelectedIndex();
				l1.select(n);
			}
			if (ev.getSource() == l1) {
				String str = l1.getSelectedItem();
				mylabel.setText(str);
			}
※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る