8

フレーム内のフォーカスに関係なく、JFrame のキー バインディングを作成するにはどうすればよいでしょうか。

私はすでにこの質問を見ました: Java.awt.Frame のキーバインディングを作成するにはどうすればよいですか?

JFrame のルート ペインの入力マップを設定しようとしましたが、フォーカスが JTextArea にある場合、editable が false であっても機能しません。

JFrame全体でキーバインディングを機能させる最も簡単な方法は何ですか?

4

3 に答える 3

7

あなたは使用してみることができますJComponent#getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)

Java ドキュメントから

registerKeyboardAction に使用される定数です。これは、受信コンポーネントが、フォーカスのあるウィンドウ内にあるか、それ自体がフォーカスされたコンポーネントである場合に、コマンドを呼び出す必要があることを意味します。

于 2013-11-01T03:14:20.223 に答える
6

@camickr が書いたように、同じキーをテキスト領域にもバインドするべきではありません。

さて、ここに実装があります:

// Action action = ...
// KeyStroke stroke = ...

JRootPane rootPane = mainJFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "myAction");
rootPane.getActionMap().put("myAction", action);
于 2014-11-04T13:59:40.363 に答える
5

JFrame のルート ペインの入力マップを設定しようとしましたが、フォーカスが JTextArea にある場合、editable が false であっても機能しません。

正しい。コンポーネントにフォーカスがあり、同じバインディングを実装している場合、そのバインディングが優先されます。

そのバインディングをテキスト領域に適用したくない場合は、テキスト領域からバインディングを削除する必要があります。

使用できるさまざまな InputMap の説明とバインディングを削除する方法の例については、Swing チュートリアルのキー バインディングの使用方法に関するセクションをお読みください。

于 2013-11-01T03:24:56.073 に答える