2013-02-05 8 views
8

NetBeans IDEにJava Swingアプリケーションがあります。KeyTypedEvent KeyEventのKeyCodeは常に0ですか?

私はフォームを作り、など、私のさまざまなコントロールにの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())); 
} 

私が何を参照してevtprintlnを追加しました私のキーリストが機能することを確認することができます。 私が構築し、自分のアプリケーションを実行して、私は、出力が常にevt.getKeyCode()をするkeycode = 0

これを確認するために、私は変わっていた私のprintlnを持っているようだと、常に0

は、私は可能性が戻っていることに気づきました完全のKeyCodeが何を誤解し、私はそれがここにOracleのドキュメント内の値とcoorespondだろうと思った:例えば

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

、VK_ESCAPEは27

012の値を持っています
+0

のKeyListenerを使用しないでくださいOracleのチュートリアルで説明されています。 DocumentListenerまたはSwing Keyバインディングを使用してください。 –

答えて

22

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

「キー入力の」イベントは、より高いレベルであり、一般 プラットフォームやキーボードレイアウトに依存しません。彼らは、getKeyCodeメソッドは イベントのキーコードを返し、キーを押すとキーリリースイベントの場合....

をユニコード 文字が入力されたときに生成され、約 文字入力を見つけるための好ましい方法ですされています。キー入力イベントの場合、getKeyCodeメソッド は常にVK_UNDEFINEDを返します。

0

非常に押されたキーに依存します。おそらく、keyTypedが印刷不可能な文字でトリガーされていないため、とkeyPressedメソッドのオーバーライドが必要です。

ここkeyTypedkeyPressedの違いを見てみましょう。 KeyListener, keyPressed versus keyTyped

関連する問題