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()));
}
_
println
にevt
を追加して、何が起こるかを確認し、キーリスナーが機能することを確認しました。アプリケーションをビルドして実行すると、出力には常に_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です。
keyTyped()
イベントは、文字入力を生成するキーにのみ使用されます。キーがいつ押されたり離されたりしたかを知りたい場合は、keyPressed()
またはkeyReleased()
を実装する必要があります。
KeyEvent APIから:
「キー入力」イベントは高レベルであり、通常、プラットフォームやキーボードレイアウトに依存しません。これらはUnicode文字が入力されたときに生成され、文字入力について調べるための推奨される方法です。
キーが押されたイベントとキーが解放されたイベントの場合、getKeyCodeメソッドはイベントのkeyCodeを返します。キータイプのイベントの場合、getKeyCodeメソッドは常にVK_UNDEFINEDを返します。
KeyListener
に対するJButton
に関するすべての提案は間違っています。つまり、Button1.addKeyListener(new Java.awt.event.KeyAdapter() {
これらのイベントは実装されており、JButtons API
、 SwingAction
を使用するか、 ActionListener
を追加してMouse and Key Event
from/to JButton
基本的にすべてがOracleチュートリアルで説明されています ボタン、チェックボックス、およびラジオボタンの使用方法
押されたキーに大きく依存します。印刷できない文字ではKeyListener
がトリガーされないため、おそらくkeyPressed
メソッドのオーバーライドでkeyTyped
が必要です。
ここでkeyTyped
とkeyPressed
の違いを見てください: KeyListener、keyPressed vs keyTyped