1

テキストエリアからのキー押下イベントがJMenBarに到達するのに問題があります。XMLファイルから実行時にメニューバーを生成し、テキスト領域を次のように作成します。

@Override
public void createUI() {
    this.textArea = new RSyntaxTextArea(25, 70);
    this.scrollPane = new RTextScrollPane(this.textArea);
    this.setLayout(new BorderLayout());
    this.add(this.scrollPane, BorderLayout.CENTER);
    this.textArea.setSyntaxEditingStyle("text/dm");
}

RSyntaxTextArea textArea;
RTextScrollPane scrollPane;

メニューの項目では、setAccelerator()それらを使用するためのキーの組み合わせを設定するために使用します。テキスト領域で上記の組み合わせを使用すると、メニュー項目に到達しません。以前にこの問題が発生したことを覚えていませんが、なぜ今起こっているのか考えてみてください。

問題は解決しました(私自身の質問に答えるのに6時間待ちたくありませんでした。):

メニューに使用されるキーマッピングのリストを保持し、JComponentクラスの入力マップを使用してテキスト領域にそれらを無視させることで、問題を解決しました。

コード:

for(KeyStroke ks : this.mappedKeyStrokes) {
    component.getInputMap().put(ks, "none");
}
4

1 に答える 1

2

テキスト領域で上記の組み合わせを使用すると、メニュー項目に到達することはありません[...]なぜそれが起こっているのか考えてみてください。

これは(keyBindingsの)設計によるものです。メニューバインディングは基本的にcomponentInputMap(==タイプWHEN_IN_FOCUSED_WINDOWのinputMap)を介して処理されます。InputMapsは順番に提供されます

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

前に処理されていない場合にのみ、次の行に渡されます。

于 2012-09-25T09:09:57.837 に答える