首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不关注macOS的Java JDialog交互

不关注macOS的Java JDialog交互
EN

Stack Overflow用户
提问于 2018-05-30 02:21:43
回答 1查看 295关注 0票数 2

我知道围绕这个问题有很多讨论,但这次是不同的。我们有一个java应用程序,它在Windows (本地钩子)的键盘事件上显示一个JDialog。它工作得很好,当我在java窗口中单击某些东西时,当前应用程序的焦点不会丢失。在macOS上,它会将活动应用程序切换到我的java窗口。我设法用下面的代码隐藏了停靠图标:

-Dglass.taskbarApplication=false

但这还不够,我希望我的java应用程序永远不要被关注。我读到了有关headless属性的内容,但它不能工作,因为我显示了一个JDialog。它在Windows上运行得很好,但在Mac上,托盘应用程序就不一样了。这个是可能的吗?是JDialog有问题,还是我可以添加一些参数来在后台运行我的java应用程序?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 06:02:34

注意:以下解决方案仅在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);
        });
    }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50590633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档