JMenuBar не получает комбинации клавиш из RSyntaxTextArea

У меня проблемы с тем, что события нажатия клавиш из текстовой области достигают 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");
}

1 ответ

Решение

Когда я использую указанные комбинации в текстовой области, они никогда не доходят до пункта меню [...]. Есть идеи, почему это происходит?

Это по замыслу (связывания клавиш): привязки меню в основном обрабатываются с помощью componentInputMap (== inputMap типа WHEN_IN_FOCUSED_WINDOW). InputMaps подаются в последовательности

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

переход к следующему в строке, только если не обработано ранее.

Другие вопросы по тегам