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 回答