SWING を使用するゲームにキーボード ショートカットを追加したいと考えています。これまでのところ、次のコードを使用しています。
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) { ... }
テスト目的で、このアプリケーションの 2 つのインスタンスを作成したいと思います (ネットワーク プレイのテスト)。問題は、ホットキーを使用すると、フォーカスされていないウィンドウがフォーカスを取得することです。(後で作成したウィンドウ。)
問題はそれだと思います
KeyboardFocusManager.getCurrentKeyboardFocusManager()
静的メソッドです (両方のインスタンスが同じ JVM から開始されます)。
私が考えることができる他の唯一のオプションは、すべてのコンポーネントがキーイベントを祖先の JFrame に委譲し、そこでそれらを 1 か所で処理できるようにすることでしたが、これには多くの定型コードが含まれ、これは醜いものになると思います。解決。
また、問題は通常のゲームプレイ中に発生することはなく、テスト中にのみ発生します。