2009年5月23日土曜日

Java AWT キー操作に関するイベント

KeyListener
keyPressedキーが打たれた瞬間に発生するイベント
keyReleasedキーが離された瞬間に発生するイベント
keyTypedキーが入力されたことを示すイベント

KeyAdapterクラスはKeyListenerインターフェースを実装済みのクラスです。


keyPressedとkeyTypedの違い
・大文字のAを入力する際、Shiftキー + aキー を押下しますが、
まずShiftキー押下でkeyPressが発生し、aキー押下でkeyPressが続けて発生し、その後keyTypedが発生します。

・特殊キー(Shift、Alt、Ctrl、矢印など)はkeyPressedで補足できるが、keyTypedでは補足できません。

・全角「か」を入力する際、kキー + aキーを押下しますが、keyPressは発生しませんが、keyTypedは発生します。

つまり特殊キーを補足して処理を行いたい場合はkeyPressを使用し、文字入力にた対して処理を行いたい場合はkeyTypedを使用します。
JavaではBackspace、Del、Enter、Esc、Spaceキーは特殊キーではなくkeyTypedが発生します。



package MyPackage1;

import java.awt.*;
import java.awt.event.*;

public class KeyEventSample01 {
//エントリーポイント
public static void main(String args[]){
new KeyEventSample01();
}

Frame frm;
TextField txt1;
TextField txt2;
Label lbl1;
Label lbl2;

//コンストラクタ
public KeyEventSample01(){
//フレームを作成します。
frm = new Frame("KeyEventSample01");
frm.setSize(400, 300);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
//
txt1 = new TextField();
txt1.addKeyListener(new KeyAdapter_txt1());
txt2 = new TextField();
txt2.addKeyListener(new KeyAdapter_txt2());
lbl1 = new Label();
lbl2 = new Label();
//
frm.setLayout(new GridLayout(4,1));
frm.add(txt1);
frm.add(txt2);
frm.add(lbl1);
frm.add(lbl2);
//フレームを表示します。
frm.setVisible(true);
}


private class KeyAdapter_txt1 extends KeyAdapter{

public void keyPressed(KeyEvent ev){
lbl1.setText("keyPressed:KeyChar[" + ev.getKeyChar() + "] KeyCode[" + ev.getKeyCode() + "]が押されました。" );   
}
}

private class KeyAdapter_txt2 extends KeyAdapter{

public void keyTyped(KeyEvent ev){
lbl2.setText("keyTyped:KeyChar[" + ev.getKeyChar() + "] KeyCode[" + ev.getKeyCode() + "]が押されました。" );   
}
}
}

0 件のコメント: