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というものがあり、ここではそれを組み込んでいます。