JDialog 干扰 JFrame 所有者 MenuItem 加速器

问题描述 投票:0回答:1

我有一个

JDialog
(非模态)和
JFrame
所有者。 我遇到的问题是,当
JDialog
获得焦点时,它会阻止与
ActionListener
JFrame
加速器相关的
JMenuItem
被调用。

我尝试在

KeyEventDispatcher
中实现
JDialog
并将事件重新分派给
JFrame
所有者;

DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().redispatchEvent(owner, e);

这不起作用,因为它没有触发对

JMenuItem
加速器
ActionListener
的调用。

有人有办法解决这个问题吗?

干杯

java swing jframe jdialog jmenuitem
1个回答
0
投票

谢谢@abra。

我找到了解决此问题的方法。

通过使用 KeyEventDispatcher 接口中的 dispatchKeyEvent() 方法的 KeyEvent 参数,我能够确定用于生成 KeyEvent 的关联 KeyStroke。 这使我能够在应用程序的主 JFrame 中找到 JMenuItem(如果有)以及关联的 KeyStroke 加速器。一旦我有了与 KeyStroke 关联的 JMenuItem,就可以通过 JManuItem doClick() 方法以编程方式激活它。

这有效地将 KeyEvent 从子 JDialog 重新分派到应用程序的主 JFrame。

我认为 KeyBindings 可以解决这个问题,但由于这是遗留代码,重新设计应用程序主 JFrame 的菜单结构将是一个不太理想的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.