なぜ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
の文字のようです。
これは、元の質問に対する回答にはなりません。基本的な 'a'文字の場合でも、keyCodeはなぜ異なっていますか? –
異なるキーコードはありません。キーコードは65で、これは "A"キーのキーコードです。キャラクターは何が違うのですか?それが必要です。 'Ctrl'を押しながら' A'を押すと、 'Ctrl + A'文字が得られます。 –
"Ctrlキーの有無にかかわらず、" A "キーで生成されるキーコードは65です。 実際には正しくありません。出力を見たことがありますか? –