web-dev-qa-db-ja.com

Java KeyListener:KeyTyped Backspace、Esc as input

KeyTypedメソッド内で、 Backspace または Esc 押されている?

11
Justin

http://www.fileformat.info/info/unicode/char/8/index.htm

arg0.getKeyChar()がintにキャストされる場合:(int)arg0.getKeyChar()、バックスペースキーの値は8、Escキーの値は27です。

5
Justin

KeyListenerを適切に接続し、そのKeyListenerに必要なメソッドを実装していると仮定して、特定のキー押下を検出するには、次のコードを追加するだけです。

public void keyReleased(KeyEvent ke) 
{
    if(ke.getKeyCode() == KeyEvent.VK_BACK_SPACE)
    {  
        //code to execute if backspace is pressed
    }

    if(ke.getKeyCode() == KeyEvent.VK_ESCAPE)
    {
        //code to execute if escape is pressed
    }
}

KeyEventクラスjavadocsは次のリンクにあります: KeyEvent javadocs
Java KeyListeners and KeyEventsを実装するときにキーボード入力を検出するために使用されるすべてのJava仮想キーコードのリストがあります。詳細情報KeyListenerについては、次の場所にあります: キーリスナーの作成方法 。求められたようにkeyTypedメソッドを使用するには、 gangqinlaohuの回答 を参照してください。

19
BMFredrick

これは非常に古い問題であることは理解していますが、同じ問題で非常に役立つとわかった回答を追加したいと思います。

Javaプログラムのチャット入力を作成しています。ほとんどの文字をフィルタリングする必要がなかったため、押したり放したりするのではなく、KeyTypedを使用する方が良いです。)とにかくバックスペースは文字を削除しますが、.getKeyCode()は常にドキュメントに従って0を返します。ただし、.getKeyChar()を使用して文字を返し(おそらく四角いボックスとして表示されます)、エスケープ文字 '\ b'を比較を行います。

if(tmp.getKeyChar().equals('\b')) { ... }
3
Sh4d0wsPlyr

Java 7/jdk1.7以上の場合のみevent.getKeyCode()に対してチェックする場合は、event.getExtendedKeyCode()を試してくださいメソッド。バックスペースの場合は、プレーンな0ではなく適切なコード(この場合は8)を返します。これにより、\bをチェックする必要がなくなります。

if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
    System.out.println("Backspace pressed");
}
3
spaceemotion

keyTypede.getExtendedKeyCode()を使用することもでき、正しいと思われるゼロ以外の値を返します。

0
EntangledLoops

個人的には、文字/数字以外のキーにはKeyPressedイベントを使用することを好みます。なぜなら、BackspaceキーまたはEnterキーを入力しているとき、実際には何も入力されていないからです。これが私がやったことです(KeyCodeとKeyEventがjavafx.scene.inputからインポートされていることを確認してください)!

MyTextArea.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>(){
    @Override
    public void handle(KeyEvent event) {
        if (event.getCode().equals(KeyCode.BACK_SPACE)){
            System.out.println("Success");
        }
    }
});

これでうまくいったかどうか教えてください:)

0
Josh Narsu