我无法让文本区域中的按键事件到达 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");
}
当我在文本区域中使用上述组合时,它们永远不会到达菜单项 [...] 任何想法为什么会发生这种情况?
这是(keyBindings)的设计:菜单绑定基本上是通过componentInputMap(==类型为WHEN_IN_FOCUSED_WINDOW的inputMap)处理的。输入映射按顺序提供
- WHEN_FOCUSED
- WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
- WHEN_IN_FOCUSED_WINDOW
仅当之前未处理时,才传递到下一行。