web-dev-qa-db-ja.com

KeyListener、keyPressedとkeyTyped

JFrame(JFrameを拡張するクラス)があり、F5キーを押したときにアクションを実行したい。そこで、クラスにKeyListenerを実装させました。それに伴い、keyPressed、keyReleased、keyTypedの3つのメソッドが登場しました。

押されているF5をリッスンするには、これらの方法のうちどれを使用する必要がありますか? keyPressedまたはkeyTyped?現在、次のものがありますが、F5を押しても何も印刷されません。

public void keyPressed(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_F5)
        System.out.println("F5 pressed");
}

public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
36
CodeGuy
keyPressed - when the key goes down
keyReleased - when the key comes up
keyTyped - when the unicode character represented by this key is sent by the keyboard to system input.

私は個人的にはこのためにkeyReleasedを使用します。指を持ち上げた場合にのみ発火します。

KeyTypedは、印刷可能なもの(F5が可能かどうかはわかりません)に対してのみ機能し、キーが押されていると何度も何度も起動することに注意してください。これは、画面上でキャラクターを動かすなどの場合に便利です。

41
corsiKa

どちらでもない。 KeyLIstenerを使用しないでください。

Swingは、キーバインドで使用するように設計されています。 キーバインドの使用方法 に関するSwingチュートリアルのセクションをお読みください。

18
camickr
private String message;
private ScreenManager s;


//Here is an example of code to add the keyListener() as suggested; modify 
public void init(){
Window w = s.getFullScreenWindow();
w.addKeyListener(this);

public void keyPressed(KeyEvent e){
    int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_F5)
            message = "Pressed: " + KeyEvent.getKeyText(keyCode);
}
0
Leo Schoenborn

すぐに効果が必要な場合はkeyPressedを使用し、キーを放した後に効果が必要な場合はkeyReleasedを使用する必要があります。 F5は文字ではないため、keyTypedは使用できません。 keyTypedは、文字が押されたときにのみアクティブになります。

0
Ankit Ostwal