我有一个全屏 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/