4

在 Windows 中,每个屏幕都有一个编号或标识,我假设这与我物理连接显示器电缆的方式有关。我的问题的关键是我可以重新配置这些屏幕,但它们将保持其身份。

Java 的调用GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()将给我一个GraphicsDevice.

如何将阵列中的屏幕顺序与窗口编号相关联?我会对跨平台解决方案感兴趣。

例如,我的 Windows 配置如下所示 在此处输入图像描述

但返回的数组看起来像这样

screens[0] = relates to screen 2
screens[1] = relates to screen 3
screens[2] = relates to screen 1

注意我想使用的代码是这样的

frame.setLocation(
     screens[i].getDefaultConfiguration().getBounds().x, frame.getY());

wherei应该是物理编号而不是数组中的位置(或者如果你明白我的意思,它的映射)。

4

2 回答 2

2

您可以按位置对屏幕设备进行排序:

Arrays.sort(screens, new Comparator<GraphicsDevice>() {
    public int compare(GraphicsDevice screen1,
                       GraphicsDevice screen2) {
        Rectangle bounds1 = screen1.getDefaultConfiguration().getBounds();
        Rectangle bounds2 = screen2.getDefaultConfiguration().getBounds();
        int c = bounds1.y - bounds2.y;
        if (c == 0) {
            c = bounds1.x - bounds2.x;
        }
        return c;
    }
});
于 2013-09-27T10:46:56.873 回答
0

无法保证返回的 GraphicsDevice 顺序getScreenDevices()与您在操作系统设置中看到的相同。此外,我不知道任何方便的方法来检索系统屏幕顺序(我怀疑是否存在,您肯定必须调用一些本机操作系统 API 才能获得确切的顺序)。

您可以使用有关 GraphicsDevice 的可用信息在您的应用程序中订购它们:

  • 默认设备 -GraphicsEnvironment.getLocalGraphicsEnvironment ().getDefaultScreenDevice ()

  • 设备界限 -graphicsDevice.getDefaultConfiguration ().getBounds ()

设备 ID 也可能会告诉您一些信息——graphicsDevice.getIDstring ()尽管我现在无法检查它是否受系统屏幕顺序的影响。

于 2013-09-27T10:59:24.667 回答