Java Swing:Ctrl+F1 不能全局使用,但可以互相组合键

发布于 2024-07-06 22:24:25 字数 879 浏览 7 评论 0原文

我有一个 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+F1ToolTipManager 处理。 否则我的行动就会被调用。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏日浅笑〃 2024-07-13 22:24:25

为了得到答案,这是从您在问题中的编辑中复制的解决方案。 ;-)

ToolTipManager 注册密钥
Ctrl+F1 显示工具提示文本,如果
按下组合键。 因此,如果
带有工具提示的按钮获得焦点,
Ctrl+F1
工具提示管理器。 否则我的行动是
调用。

So that this gets an answer, here's the solution copied from your edit in the question. ;-)

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.

千年*琉璃梦 2024-07-13 22:24:25

操作系统可能会重新定位 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文