![](/img/trans.png)
[英]Is there any way to run java awt application on macos without taking focus
[英]Java JDialog interaction without taking focus on macOS
我知道圍繞這個問題有很多討論,但這是不同的。 我們有一個Java應用程序,該應用程序在Windows的Keyboard事件上顯示JDialog(本機掛鈎)。 它工作正常,當我在Java窗口中單擊某些內容時,當前應用程序的焦點不會丟失。 在macOS上,它將活動應用程序更改為我的Java窗口。 我設法用這個隱藏了停靠圖標:
-Dglass.taskbarApplication=false
但這還不夠,我希望我的Java應用程序永遠不會受到關注。 我讀到有關headless屬性的信息,由於我顯示了JDialog,因此它無法工作。 它在Windows中完美運行,但是在Mac上,我猜它是一個托盤應用程序。 這可能嗎? 是JDialog的問題,還是我可以添加一些參數以在后台運行Java應用程序? 謝謝
注意:以下解決方案僅在OS X上經過測試
強制JDialog
具有Window.Type#POPUP
類型,如下所示。
dialog.setType(Window.Type.POPUP);
這樣可以使對話框具有焦點,並且當它獲得焦點時,其他窗口也不會失去焦點,例如彈出菜單。 但是,它還具有其他效果,例如使對話框表現得好像已調用dialog.setAlwaysOnTop(true)
。
注意:下面的示例應用程序在啟動時將其他窗口置於非焦點狀態,但在未聚焦的窗口再次被聚焦之后則不會。
例:
import java.awt.EventQueue;
import java.awt.Window;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
public class NonUnfocusingDialogExample {
public static void main(final String[] args) {
EventQueue.invokeLater(() -> {
final JDialog dialog = new JDialog();
dialog.setType(Window.Type.POPUP);
dialog.getContentPane().add(new JLabel("Hello World!",
SwingConstants.CENTER));
dialog.pack();
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setTitle("Test Dialog");
dialog.setLocationByPlatform(true);
dialog.setVisible(true);
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.