Java Swing:Ctrl+F1 不能全局使用,但可以互相组合键
我有一个 Swing gui,在北部有一个选项卡式窗格。 几个关键事件被添加到其输入映射中:
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 执行该操作。
问题是,如果我将 Keycode 更改为例如 VK_F2
,它就可以在任何地方工作。
键 F1 不在程序中的其他任何地方使用。
任何想法?
谢谢, André
编辑:在java源代码中进行全文搜索给出了答案:ToolTipManager
注册了键Ctrl+F1 在按下组合键时显示工具提示文本。 因此,如果带有工具提示的按钮获得焦点,则 Ctrl+F1 由 ToolTipManager
处理。 否则我的行动就会被调用。
I have a swing gui with a tabbed pane in the north. Several key events are added to its input map:
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");
If the tabbed pane or another button in a toolbar has the focus, Ctrl+F1 has no function. If another component is focused (e.g. JTree), Ctrl+F1 executes the action.
The problem is, that it workes everywhere if I change the Keycode to e.g. VK_F2
.
The key F1 is'nt used anywhere else in the program.
Any idea?
Thanks,
André
Edit: A full text search in the java source code gave the answer: 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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为了得到答案,这是从您在问题中的编辑中复制的解决方案。 ;-)
So that this gets an answer, here's the solution copied from your edit in the question. ;-)
操作系统可能会重新定位 F1 键吗? 安装一个关键监听器并查看处理哪些事件。
顺便说一句:如果您可以编辑您的问题并插入一些可测试的代码,这将会有所帮助。
May be the OS retargets the F1 key? Install a key listener and see what events are handled.
BTW: It would help if you could edit your question and insert some testable code.