ホームページ >Java >&#&チュートリアル >Java で特定のキーの押下を継続的に監視するにはどうすればよいですか?

Java で特定のキーの押下を継続的に監視するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-06 00:07:10691ブラウズ

How Can I Continuously Monitor Specific Key Presses in Java?

Java でユーザーのキーストロークを継続的に監視する

このシナリオの目標は、ユーザーが特定のキーを押しているかどうかを常に確認することです。

他の言語とは異なり、Java にはキーの押下を直接確認するためのネイティブ関数がありません。代わりに、キー イベントを処理するためにリスナー ベースのアプローチが採用されています。

解決策: KeyEventDispatcher

キー イベントを効果的に監視するために、Java は KeyEventDispatcher クラスを提供します。このクラスを使用すると、Java AWT (Abstract Window Toolkit) イベント キューにリスナーを追加し、キーが押されるか離されたときに通知を受け取ることができます。

実装:

  1. クラスレベルのブール値を宣言する変数:
private static volatile boolean wPressed = false;

この変数は、「w」キーが押されているかどうかを示します。

  1. KeyEventDispatcher を作成します:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
  @Override
  public boolean dispatchKeyEvent(KeyEvent ke) {
    synchronized (IsKeyPressed.class) {
      switch (ke.getID()) {
        case KeyEvent.KEY_PRESSED:
          if (ke.getKeyCode() == KeyEvent.VK_W) {
            wPressed = true;
          }
          break;

        case KeyEvent.KEY_RELEASED:
          if (ke.getKeyCode() == KeyEvent.VK_W) {
            wPressed = false;
          }
          break;
      }
      return false;
    }
  }
});

この匿名クラスキーイベントを処理するためにdispatchKeyEventメソッドをオーバーライドします。

  1. キー押下を確認するメソッド:
public static boolean isWPressed() {
  synchronized (IsKeyPressed.class) {
    return wPressed;
  }
}

このメソッドは、クラスオブジェクトと同期します。スレッドの安全性を確保し、wPressed の値を返します。

  1. 関数の使用:
if (IsKeyPressed.isWPressed()) {
  // Execute actions when the "w" key is pressed.
}

このアプローチを使用すると、主要なイベントを継続的に監視し、それに基づいて特定のアクションを実行できます。キーを押します。

以上がJava で特定のキーの押下を継続的に監視するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。