イベントとイベントリスナー (1/4)
作成:2010-01-14 13:24
更新:2011-10-11 15:14
更新:2011-10-11 15:14
■ボタンをクリックして操作する!
さて、いよいよ「ユーザが操作した時に何かをする」ということに進みます。いわゆる「イベント処理」ってやつです。が、これは一度に覚えないといけないことがたくさん出てくるので、気を引き締めていかないといけません。――では、まず簡単なところで、「ボタンをクリックしたらプログラムが終了する」というものを作ってみましょう。
下のリストを見てください。なんだか、複雑な感じになってきましたねえ。importが1つ増えてますし、それによく見ると、なんだかクラスが2つも書いてあるみたいじゃないですか。こりゃ、見るからに凄そうですね。――とりあえず、実際にコンパイルして試してみて下さい。ボタンをクリックすると、プログラムが終了するようになっているはずですよ。
このプログラムでは、「Test5」というクラスの後に、「ClickAction」というクラスがくっついてます。2つのクラス定義が書いてあるんですね。実をいえば、Javaではこんな具合に、1つのファイルにいくつものクラスを書いておけるんです。「それじゃ、ファイル名はどうすればいいんだ?」と思うでしょうが、上の例なら「Test5.java」で大丈夫です。
Javaでは「ファイル名はクラス名と同じ」といいましたが、これは正しくは「publicなクラス名と同じ」ということなんです。ほら、Test5の前にはpublicってあるでしょ?
publicって何か、なんでClickActionにはpublicがないか、とかいうことはとりあえず今はおいといて下さい。まずは、一番重要な「イベント処理の仕組み」から理解していきましょう。
Javaのイベント処理は「代理イベントシステム」と呼ばれます。これはつまり、「イベント処理専用の代理人がいて、それに『何かあったらやっといてね』とお願いしておく」という方式なのです。従来は、あらかじめイベント用のメソッドがクラスの中にずらりと用意されていて、それを必要に応じて使っていたのですが、この代理方式だと、必要なものだけ組み込めば、後のイベントは全て無視されるので、プログラムの流れからするとすっきりするのですね。また、イベント処理の部分を本体と切り離せるので、後々メンテナンスが楽という面もあります。
で、肝心の代理人ですが、もちろんJavaの中に小人さんがいてやってくれるわけではありません。代理人といっても、クラスとして用意されているわけですね。つまり、Javaのイベント処理は、整理するとこんな感じになります。
・イベント処理の代理人となってくれるクラスを作り、その中に実際の処理を用意しておく。
・AWTを使うクラスを作ったときに、「この部品にはイベント処理が必要だな」というものがあったら、用意しておいた代理人クラスのインスタンスをそれに組み込む。
要するに、2段構えになってるわけですね。ここでは、ClickAction が代理人のクラスで、これをボタンの部品に組み込んでいたのです。
下のリストを見てください。なんだか、複雑な感じになってきましたねえ。importが1つ増えてますし、それによく見ると、なんだかクラスが2つも書いてあるみたいじゃないですか。こりゃ、見るからに凄そうですね。――とりあえず、実際にコンパイルして試してみて下さい。ボタンをクリックすると、プログラムが終了するようになっているはずですよ。
このプログラムでは、「Test5」というクラスの後に、「ClickAction」というクラスがくっついてます。2つのクラス定義が書いてあるんですね。実をいえば、Javaではこんな具合に、1つのファイルにいくつものクラスを書いておけるんです。「それじゃ、ファイル名はどうすればいいんだ?」と思うでしょうが、上の例なら「Test5.java」で大丈夫です。
Javaでは「ファイル名はクラス名と同じ」といいましたが、これは正しくは「publicなクラス名と同じ」ということなんです。ほら、Test5の前にはpublicってあるでしょ?
publicって何か、なんでClickActionにはpublicがないか、とかいうことはとりあえず今はおいといて下さい。まずは、一番重要な「イベント処理の仕組み」から理解していきましょう。
Javaのイベント処理は「代理イベントシステム」と呼ばれます。これはつまり、「イベント処理専用の代理人がいて、それに『何かあったらやっといてね』とお願いしておく」という方式なのです。従来は、あらかじめイベント用のメソッドがクラスの中にずらりと用意されていて、それを必要に応じて使っていたのですが、この代理方式だと、必要なものだけ組み込めば、後のイベントは全て無視されるので、プログラムの流れからするとすっきりするのですね。また、イベント処理の部分を本体と切り離せるので、後々メンテナンスが楽という面もあります。
で、肝心の代理人ですが、もちろんJavaの中に小人さんがいてやってくれるわけではありません。代理人といっても、クラスとして用意されているわけですね。つまり、Javaのイベント処理は、整理するとこんな感じになります。
・イベント処理の代理人となってくれるクラスを作り、その中に実際の処理を用意しておく。
・AWTを使うクラスを作ったときに、「この部品にはイベント処理が必要だな」というものがあったら、用意しておいた代理人クラスのインスタンスをそれに組み込む。
要するに、2段構えになってるわけですね。ここでは、ClickAction が代理人のクラスで、これをボタンの部品に組み込んでいたのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
import java.awt.*; import java.awt.event.*; public class Test5 extends Frame { public Test5() { super(); setTitle("Hello"); setSize(300,150); setLayout(null); Button mybutton; mybutton = new Button("OK"); mybutton.setBounds(100,100,100,25); this.add(mybutton); ClickAction act = new ClickAction(); mybutton.addActionListener(act); } public static void main (String args []) { new Test5().setVisible(true); } } class ClickAction implements ActionListener { public void actionPerformed(ActionEvent ev){ System.exit(0); } }
※関連コンテンツ