Event処理
次は、ユーザの操作に応じて、画面が変化するようにしてみましょう。
- ボタンを押したら,下の
TextField
に “Button Pressed!” と表示がでる。 - 上の
TextField
に文字を入力後リターンボタンを押すと、下のTextField
に “Echo: “という文字とともに、その内容が表示される。
こういった処理を行うためには、
- GUIイベントの処理の方法を登録しておき、
- システムが指定されたイベントを見つけたら、その処理ルーチンを呼んでもらう
必要があります。そう、インターフェイスの出番です。
まずは、プログラムを見てもらいましょうか。プログラムは、以下のとおり。
- Simple1: Simple0 をすこし改修したもの
- MyButtonListener, MyTextFieldListener: 登録されるイベントリスナ
Simple1 改修部分
void initialize() {
//...省略
/*** ここから追加部分 ***/
text1.setEditable(false); // text1 をユーザ編集不可に
// event listener をボタンと text0 に付加
button.addActionListener(new MyButtonListener(this));
text0.addActionListener(new MyTextFieldListener(this));
}
public void echoButton() { // ボタンが押されたことを、text1に表示
text1.setText("Button Pressed!");
}
public void echoText() { // text0 の内容を text1 に表示
text1.setText("Echo: " + text0.getText());
}
ポイント
JButton
やJTextField
といった部品に対し、イベントリスナを登録している。- 実際のボタンやテキスト入力を受けたときの処理は、
echoButton()
,echoText()
というメソッドとして、Sample1
クラスに作成済み。 - つまり、イベントリスナがすべきは、イベントが起きた際によばれ、
echoButton()
なりechoText()
を呼ぶことだけ
public class MyButtonListener implements ActionListener {
private Simple1 simple1;
public MyButtonListener(Simple1 simple1) {
this.simple1 = simple1;
}
public void actionPerformed(ActionEvent arg0) {
simple1.echoButton();
}
}
ポイント
- java.awt.event.ActionListener というインタフェイスを実装。
- イベント処理内容は、
actionPerformed(ActionEvent e)
に記載。- イベントの中身は
e
にアクセスすることで取得可能。
- イベントの中身は
- 今回は、イベントが起きたら、
echoButton()
を呼んでいるだけ。 - だた、こういうクラスをそれぞれつくっていたら大変なので、anonymousInnerclass や lambda expression を使うことが最近は多いです。