JMenuBar未从RSyntaxTextArea接收组合键

时间:2012-09-24 23:59:21

标签: java swing events jmenu rsyntaxtextarea

我遇到来自textarea的按键事件到达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 个答案:

答案 0 :(得分:2)

  

当我在文本区域中使用所述组合时,他们从未到达菜单项[...]任何想法为什么会发生?

这是设计的(keyBindings):菜单绑定基本上是通过componentInputMap(= WHEN_IN_FOCUSED_WINDOW类型的inputMap)处理的。 InputMaps按顺序提供

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

只有在之前处理时才会传入下一行。