3

我有一个全屏 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,它是左侧的第一个屏幕)。有没有办法查询操作系统以确定显示器的布局和/或其他一些技术来在特定的物理监视器上显示全屏?

4

1 回答 1

3

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

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);
于 2012-06-05T00:36:22.797 回答