web-dev-qa-db-ja.com

KeyTypedEvent KeyEventのKeyCodeは常に0ですか?

NetBeansIDEにJava Swingアプリケーションがあります。

フォームを作成し、KeyListenerをさまざまなコントロールに添付しました。

_    jButton1.addKeyListener(new Java.awt.event.KeyAdapter() {
        public void keyTyped(Java.awt.event.KeyEvent evt) {
            keyTypedEvent(evt);
        }
    });
_

keyTypedEventは次のように定義されています。

_private void keyTypedEvent(Java.awt.event.KeyEvent evt) 
{                               
System.out.println(evt);
appendDisplay(String.valueOf(evt.getKeyChar()));
} 
_

printlnevtを追加して、何が起こるかを確認し、キーリスナーが機能することを確認しました。アプリケーションをビルドして実行すると、出力には常に_keycode = 0_があるように見えることに気付きました。

これを確認するために、printlnをevt.getKeyCode()に変更しましたが、常に0が返されます。

KeyCodeの機能を完全に誤解している可能性がありますが、次のOracleのドキュメントの値と一致すると思いました。

http://docs.Oracle.com/javase/7/docs/api/constant-values.html#Java.awt.event.KeyEvent.VK_ESCAPE

たとえば、VK_ESCAPEの値は27です。

16
Rhs

keyTyped()イベントは、文字入力を生成するキーにのみ使用されます。キーがいつ押されたり離されたりしたかを知りたい場合は、keyPressed()またはkeyReleased()を実装する必要があります。

KeyEvent APIから:

「キー入力」イベントは高レベルであり、通常、プラットフォームやキーボードレイアウトに依存しません。これらはUnicode文字が入力されたときに生成され、文字入力について調べるための推奨される方法です。

キーが押されたイベントとキーが解放されたイベントの場合、getKeyCodeメソッドはイベントのkeyCodeを返します。キータイプのイベントの場合、getKeyCodeメソッドは常にVK_UNDEFINEDを返します。

30
3
mKorbel

押されたキーに大きく依存します。印刷できない文字ではKeyListenerがトリガーされないため、おそらくkeyPressedメソッドのオーバーライドでkeyTypedが必要です。

ここでkeyTypedkeyPressedの違いを見てください: KeyListener、keyPressed vs keyTyped

0
mishadoff