【问题标题】:JMenuBar Not Receiving Key Combinations From RSyntaxTextAreaJMenuBar 未从 RSyntaxTextArea 接收键组合
【发布时间】:2012-09-24 23:59:20
【问题描述】:

我无法让来自文本区域的按键事件到达 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");
}

【问题讨论】:

  • 您是否尝试过请求焦点?
  • 助记符只是没有削减它,我害怕。
  • 只要确保你没有通过“取消”它的输入映射来破坏组件的一些基本功能。

标签: java swing events jmenu rsyntaxtextarea


【解决方案1】:

当我在文本区域中使用上述组合时,它们永远不会到达菜单项 [...] 知道为什么会这样吗?

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

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

只有在 没有 之前处理过时才传递到下一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 2017-11-28
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多