2016-11-19 194 views
1

我有一些麻煩,在Java中使用這種setFocusableWindowState(false)方法:在Java中,如何保持原有窗口的焦點,儘管點擊JFrame的

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

即使在Windows操作系統中,它的工作原理肯定很好。 即 - 當JFrame可見時,它保持原始窗口的焦點。 所以我可以發送一些事件,如Keypress到原始窗口。

但是,我仍然在Mac上使用相同的代碼失敗。 只是它失去了他的焦點,然而原來的窗口(顯示在新窗口出現之前),也失去了它的焦點。所以我永遠不會發送任何事件到Mac的窗口。

請幫助我保持原始窗口的焦點在Mac OS X中,儘管出現了新的JFrame。 此外,我在同一時間使用方法setAlwaysOnTop(true)

回答

0

最後,我發現在蘋果實現這個方式。

實際上,當用戶通過鼠標左鍵點擊JFrame時,窗口失去了焦點。

但是,當鼠標右鍵點擊時,它從未失去原始焦點。 (我意外地發現了這個)。

所以,使用JNI,我鉤住了所有的鼠標事件,然後消耗鼠標左鍵單擊事件。同時在代碼中生成鼠標右鍵單擊事件。

我希望你能從這個答案中得到一些東西。 此致敬禮。

0

你可以試試這個

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

我只是想知道你在Mac上試過這個。 – Lin