java - 通过 java 确定窗口显示编号和/或布局

标签 java multiple-monitors

我有一个全屏 java 应用程序,它将在 Windows 7 机器上的 8 显示器数字标牌类型显示器上运行。我需要能够在特定的物理监视器上显示内容。理想情况下,我希望显示器在显示属性 -> 设置中排序为 1-8,但是许多拔出/插入和重新排序的尝试都未能通过显示属性 -> 设置使物理显示器以任何确定的顺序出现。我可以很好地重新排序它们,但是当我的 Java 程序在显示器上检索信息时,它不在 Windows 配置它们的布局/顺序中。

GraphicsEnvironment ID 返回 Device0 和 Device1 等字符串,但这些与显示属性中显示的 Windows 显示编号不匹配。例如,如果布局是 7、4、1、2、3、4、5、6,我仍然会返回 Device0、Device1... 其中 Device0 对应于已识别的屏幕 1(不是 7,它是左侧的第一个屏幕).有没有一种方法可以查询操作系统以确定显示器的布局和/或其他一些技术来在特定的物理显示器上全屏显示?

最佳答案

您可以获得相对于大虚拟桌面的屏幕边界:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (GraphicsDevice gd : ge.getScreenDevices()) {
    Rectangle bounds = gd.getDefaultConfiguration().getBounds();
    System.out.println(bounds.toString());
}

对于我的设置,这给出了:

java.awt.Rectangle[x=0,y=0,width=1280,height=1024]
java.awt.Rectangle[x=1280,y=304,width=1280,height=720]

您可以使用此信息来确定它们的顺序。例如。如果您绝对确定您的显示器在一个漂亮的网格中,您可以像这样在右上角的显示器上全屏显示:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gdUpperRight = null;
Rectangle bUpperRight = null;
for (GraphicsDevice gd : ge.getScreenDevices()) {
    Rectangle b = gd.getDefaultConfiguration().getBounds();
    if (bUpperRight == null || b.x > bUpperRight.x || b.y > bUpperRight.y) {
        bUpperRight = b;
        gdUpperRight = gd;
    }
}

gdUpperRight.setFullScreenWindow(myFrame);

关于java - 通过 java 确定窗口显示编号和/或布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888131/

相关文章:

java - 第二个监视器上的工具提示显示在监视器的边缘

c# - 双显示器屏幕捕获问题

java - 有人很了解外部文件吗?

java - Jackson: JsonInclude 如何添加多个 JsonInclude 注解类型

java - .Net 与 Java 工作

java - 使用 Java 内置库的简单 RSA 加密

c# - 如何在 Windows 窗体应用程序中获取监视器的屏幕大小以捕获屏幕截图?

winapi - 使用 Win32/SDL 将全屏窗口移动到辅助监视器

java - eclipse:如何让 "link with editor"在窗口之间工作?

java - 如何在没有 App 服务器和 Web 服务器的情况下从 UI 调用 shell 脚本?