我知道围绕这个问题有很多讨论,但这次是不同的。我们有一个java应用程序,它在Windows (本地钩子)的键盘事件上显示一个JDialog。它工作得很好,当我在java窗口中单击某些东西时,当前应用程序的焦点不会丢失。在macOS上,它会将活动应用程序切换到我的java窗口。我设法用下面的代码隐藏了停靠图标:
-Dglass.taskbarApplication=false
但这还不够,我希望我的java应用程序永远不要被关注。我读到了有关headless属性的内容,但它不能工作,因为我显示了一个JDialog。它在Windows上运行得很好,但在Mac上,托盘应用程序就不一样了。这个是可能的吗?是JDialog有问题,还是我可以添加一些参数来在后台运行我的java应用程序?谢谢
发布于 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);
});
}
}
https://stackoverflow.com/questions/50590633
复制相似问题