キーボードのイベント処理
続いて、キーボードのイベント処理です。これは「KeyListener」というインターフェイスとして用意されています。これの定義は以下のようになります。
class クラス名 implements KeyListener {
@Override
public void keyPressed(KeyEvent ev) { ……処理…… }
@Override
public void keyReleased(KeyEvent ev) { ……処理…… }
@Override
public void keyTyped(KeyEvent ev) { ……処理…… }
}
キーボード関係の処理はKeyListenerで行います。このインターフェイスには、キーを押したときのイベント「keyTyped」と、キーを押し下げたり離したりしたときのイベント「keyPressed」「keyReleased」が用意されています。
似たようなものが用意されていますが、keyPressed/keyReleasedはキーの上げ下げに反応するのに対し、keyTypedはキーをタイプする(押して離す)際に発生するものです。両者は似ていますが微妙に違います。例えば、ShiftキーやCtrlキーのような機能キーの類は、押してもkeyTypedイベントは発生しませんが、keyPressed/keyReleasedイベントは発生します。
引数に渡されるKeyEventは、キーイベントに関する情報を管理するクラスです。ここでは、「getKeyChar」というメソッドでイベントが発生したキーの文字を取り出すことができます。また、「getKeyCode」で、キーのコード番号を取り出すことも可能です。
マウスイベントと同様、キーボードのイベントにもアダプタクラスは用意されています。「KeyAdapter」というもので、これを継承してイベント処理を作成することも可能です。
では、これも簡単なサンプルを作成しましょう。FrameにLabelを1つ用意し、キーをタイプすると、その文字がLabelに表示されていくようなものを考えてみます。
package jp.allabout;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SampleApp extends Frame {
private Label label;
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
public SampleApp(){
label = new Label();
label.setFont(new Font(Font.SERIF,Font.PLAIN,24));
this.add(label,BorderLayout.CENTER);
this.addKeyListener(new MyKeyAdapter());
this.setSize(300,100);
}
class MyKeyAdapter extends KeyAdapter {
@Override
public void keyTyped(KeyEvent ev) {
super.keyTyped(ev);
String s = label.getText();
label.setText(s + ev.getKeyChar());
}
}
}
キーをタイプすると文字が表示されていく。 |
ここでは、extends KeyAdapterしてイベント処理クラスを作成しました。keyTypedメソッドで、label.getTextでLabelのテキストを取り出し、それにev.getKeyChar()で取り出したキーの文字を付け加えて再びlabel.setTextしています。