簡體   English   中英

Java JDialog交互而無需關注macOS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM