フレーム内のフォーカスに関係なく、JFrame のキー バインディングを作成するにはどうすればよいでしょうか。
私はすでにこの質問を見ました: Java.awt.Frame のキーバインディングを作成するにはどうすればよいですか?
JFrame のルート ペインの入力マップを設定しようとしましたが、フォーカスが JTextArea にある場合、editable が false であっても機能しません。
JFrame全体でキーバインディングを機能させる最も簡単な方法は何ですか?
フレーム内のフォーカスに関係なく、JFrame のキー バインディングを作成するにはどうすればよいでしょうか。
私はすでにこの質問を見ました: Java.awt.Frame のキーバインディングを作成するにはどうすればよいですか?
JFrame のルート ペインの入力マップを設定しようとしましたが、フォーカスが JTextArea にある場合、editable が false であっても機能しません。
JFrame全体でキーバインディングを機能させる最も簡単な方法は何ですか?
あなたは使用してみることができますJComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
registerKeyboardAction に使用される定数です。これは、受信コンポーネントが、フォーカスのあるウィンドウ内にあるか、それ自体がフォーカスされたコンポーネントである場合に、コマンドを呼び出す必要があることを意味します。
@camickr が書いたように、同じキーをテキスト領域にもバインドするべきではありません。
さて、ここに実装があります:
// Action action = ...
// KeyStroke stroke = ...
JRootPane rootPane = mainJFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "myAction");
rootPane.getActionMap().put("myAction", action);
JFrame のルート ペインの入力マップを設定しようとしましたが、フォーカスが JTextArea にある場合、editable が false であっても機能しません。
正しい。コンポーネントにフォーカスがあり、同じバインディングを実装している場合、そのバインディングが優先されます。
そのバインディングをテキスト領域に適用したくない場合は、テキスト領域からバインディングを削除する必要があります。
使用できるさまざまな InputMap の説明とバインディングを削除する方法の例については、Swing チュートリアルのキー バインディングの使用方法に関するセクションをお読みください。