java – 使用Swing将物理屏幕位置映射到GraphicsDevice数组


Windows中,每个屏幕都有一个编号或身份,我认为这与我物理连接显示器电缆的方式有关.我的问题的关键是我可以重新配置这些屏幕,但他们会保持自己的身份.

Java对GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()的调用会给我一个GraphicsDevice数组.

如何将数组中的屏幕顺序与Window编号相关联?我对跨平台解决方案感兴趣.

例如,我的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());

我应该是物理数字,而不是数组中的位置(或者如果你看到我的意思,它的映射).

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

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;
    }
});
点赞