Processing依存からの脱却−イベントリスナー(5)

 今回はキーボードに関するイベントリスナーをメモ的に書いていきます。キーボードの操作を行うと、KeyEventが発生します。それを受信するためにはKeyListenerによって行います。

KeyListenerの組み込み

コンポーネント.addKeyListener(KeyListener);

KeyListenerのイベント処理用メソッド

//キーボードをタイプしたとき
public void keyTyped(KeyEvent e)

//キーボードを押したとき
public void keyPressed(KeyEvent e)

//キーボードを放したとき
public void keyReleased(KeyEvent e)

KeyEventの主要なメソッド

//イベントが発生したキーの文字をcharで返す
KeyEvent.getKeyChar();

//イベントが発生したキーのキーコードをintで返す
KeyEvent.getKeyCode();

//イベントが発生したときにAlt,Shift,メタ,Ctrlが押されているかをbooleanで返す
KeyEvent.isAltDown();
KeyEvent.isShiftDown();
KeyEvent.isMetaDown();
KeyEvent.isControlDown();

ここで、注意点ですが、KeyTypedというのは文字を入力する'a'とか's'のキーを打ったときにしか呼び出されません。また、キーコード関連で、KeyEventには仮想キーコードというものがあります。これはVK_○という形で表されるもので、○には文字が入ります。例えば、Aの仮想キーコードはVK_A、1の仮想キーコードはVK_1となります。また、特殊なキー、例えば、バックスペースキーの仮想キーコードはVK_BACK_SPACEとなります。

これらを利用すると次のようなプログラムが組めます。

public class Main extends Frame{
	//TextFieldはテキストボックスのコンポーネントです。
	TextField t;
	Label l;

	public Main(){
		this.setSize(200, 100);
		t = new TextField();
		//KeyListenerをテキストフィールドに組み込む
		t.addKeyListener(new MyKeyListener());
		this.add(t,BorderLayout.NORTH);
		l = new Label();
		this.add(l,BorderLayout.CENTER);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});

		this.setVisible(true);
	}

	public static void main(String[] args){
		new Main();
	}

	class MyKeyListener extends KeyAdapter{
		public void keyTyped(KeyEvent e){
			char c = e.getKeyChar();
			//getSourceはイベントが発生したコンポーネントを
			//オブジェクトとして返すので、
			//TextFieldにキャストしている。
			TextField t = (TextField)e.getSource();
			//getName はインスタンスの名前をStringで返す
			String str = t.getName();
			l.setText("\"" + c + "\"\t" + str);
		}
	}
}

 ここで、getSource()はAWTEventのコンポーネントをオブジェクトとして返します。getName()はObjectの名前をStringとして返すのもの。
 また、KeyListenerを予め組み込まれたクラスとしてKeyAdapterというものがあり、ここではそれを組み込んでいます。