2017-08-02 4 views
0

なぜkeyTypedはkeyPressed/keyReleasedに異なるKeyEventsを返しますか?Java Swing keyEventとkeyPressed/keyReleased - 異なるキーコードですか?

package poke; 

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 

public class PokeEvents implements KeyListener { 
    static public void main(String args[]) { 
     new PokeEvents(); 
    } 

    public PokeEvents() { 
     JFrame frame = new JFrame(); 
     frame.addKeyListener(this); 
     frame.setVisible(true); 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     System.err.println("keyTyped: "+e.getKeyCode()+", "+e.getKeyChar()+", "+e.getExtendedKeyCode()); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     System.err.println("keyPressed: "+e.getKeyCode()+", "+e.getKeyChar()+", "+e.getExtendedKeyCode()); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     System.err.println("keyReleased: "+e.getKeyCode()+", "+e.getKeyChar()+", "+e.getExtendedKeyCode()); 
    } 

} 

実行して、プレス '' キーボードで、出力は次のとおりです。

keyPressed: 65, a, 65 
keyTyped: 0, a, 0 
keyReleased: 65, a, 65 

OKは、十分に無害なようで、あなたが言います。アンティーをアップしよう。それをCtrlと組み合わせてみてください(これを公開したソフトウェアの元のバグは、Ctrlキーの組み合わせを扱っていました)。

keyPressed: 17, , 17 
keyPressed: 65, , 65 
keyTyped: 0, , 0 
keyReleased: 65, , 65 
keyReleased: 17, , 17 

注意してください:17 - 制御、65 - a。

keyTypedには、文字が何であるかを知る方法がありません。それは種類のnullの文字のようです。

が文字がブラウザでレンダリングされていないので、ここでは、エディタあたりとEclipseのようである:

output as pasted in the SO editer

Output as seen in Eclipse console

答えて

3

全く異なるキーコードはありません。 Ctrlの有無にかかわらず、「A」キーによって生成されるキーコードは65です。Ctrlが押されたときの違いは、getKeyChar()から得られる文字です。それが必要です。

いいえ、取得する文字は「null文字の種類」ではなく、Ctrl+A文字で、ASCIIコード1であり、印刷できません。しかしそれはそこにあります。あなたはそれを見ません。なぜなら、それは、まあ、印刷できないからです。

KeyTypedは、Ctrlが押されたかどうかにかかわらず、常にキーコードとして0を報告します。 クラスのkeyCodeメンバは、KeyTypedイベントでは未定義です。彼らはイベントクラスがKeyTypedのときにはkeyCodeの情報を得ることは決してないので、同じイベントクラスを再利用しているだけなので、ゲッターがまだ呼び出すことができますが、あなたはそうではありません。 keyCodeが必要な場合は、keyPressedイベントをご覧ください。キャラクターが必要な場合は、keyPressedまたはkeyTypedのイベントを見てください。

+0

これは、元の質問に対する回答にはなりません。基本的な 'a'文字の場合でも、keyCodeはなぜ異なっていますか? –

+0

異なるキーコードはありません。キーコードは65で、これは "A"キーのキーコードです。キャラクターは何が違うのですか?それが必要です。 'Ctrl'を押しながら' A'を押すと、 'Ctrl + A'文字が得られます。 –

+0

"Ctrlキーの有無にかかわらず、" A "キーで生成されるキーコードは65です。 実際には正しくありません。出力を見たことがありますか? –

関連する問題