Java Swing:Ctrl + F1不能在全局范围内工作,但可以互相组合使用

时间:2020-03-06 14:46:31  来源:igfitidea点击:

我有一个带有北部选项卡式窗格的秋千图形用户界面。几个关键事件被添加到其输入映射中:

InputMap paneInputMap = pane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
paneInputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_E, KeyEvent.CTRL_MASK ), "finish");
paneInputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_F1, KeyEvent.CTRL_MASK ), "toggletoolbar");

如果选项卡式窗格或者工具栏中的另一个按钮具有焦点,则Ctrl + F1不起作用。如果另一个组件被关注(例如JTree),则Ctrl + F1执行动作。

问题是,如果我将密钥代码更改为例如,它可以在任何地方工作VK_F2.

程序中的其他任何地方都不会使用键" F1"。

任何的想法?

谢谢,
安德烈

编辑:在Java源代码中的全文搜索给出了答案:如果按了组合键,则ToolTipManager将注册键Ctrl + F1以显示工具提示文本。因此,如果焦点对准带有工具提示的按钮,则Ctrl + F1由ToolTipManager处理。否则,我的行动将被调用。

解决方案

操作系统是否可以重新定位" F1"键?安装密钥侦听器,并查看处理了哪些事件。

顺便说一句:如果我们可以编辑问题并插入一些可测试的代码,这将有所帮助。

为了得到答案,以下是从我们对问题的编辑中复制的解决方案。 ;-)

The ToolTipManager registeres the Key
  `Ctrl`+`F1` to display the tooltip text if
  the key combination is pressed. So if
  a button with a tooltip is focused,
  `Ctrl`+`F1` is handled by the
  ToolTipManager. Otherwise my action is
  called.