在 Java 中,如何在单击 JFrame 的情况下保持原始 window 的焦点

In Java, how to keep the original window's focus, despite of clicking JFrame

我在 java 中使用这个 setFocusableWindowState(false) 方法时遇到了一些麻烦:

JFrame frame = new JFrame(); frame.setFocusableWindowState(false); frame.setVisibled(true);

即使在 Windows OS 中,它也绝对有效。 也就是说 - 当 JFrame 可见时,它保持原始 window 的焦点。 所以我可以发送一些事件,例如 Keypress 到原始的 window.

但是,我仍然无法使用相同的代码 Mac。 只是它失去了他的焦点,然而原来的 window(在新的 JFrame window 出现之前显示)也失去了它的焦点。所以我永远无法向 Mac 中的那个 window 发送任何事件。

尽管新的 JFrame 出现了,但请帮助我将原来的 window 的焦点保留在 Mac OS X 中。 另外,我同时使用了方法setAlwaysOnTop(true)

你能试试这个吗

 frame.setExtendedState(JFrame.NORMAL);
 frame.setAlwaysOnTop(true);
 frame.requestFocus();
 frame.setAlwaysOnTop(false);

最后,我在Mac中找到了实现方法。

实际上,当用户用鼠标左键单击 JFrame 时,window 失去了焦点。

但是当鼠标右键单击时,它不会失去原来的焦点。 (这是我无意中发现的。)

因此,我使用 JNI 挂钩了所有鼠标事件,然后使用鼠标左键单击事件。同时在代码中生成鼠标右键单击事件。

希望您能从这个回答中有所收获。 最好的问候。