默认位置如何工作? / 什么是默认监视器?

问题描述

我正在开发一些应用程序,该应用程序可以获取用户的多台显示器宽度,假设他们顶部没有任何显示器,然后为他们提供多个按钮/框架,以便他们可以关闭他们的任何显示器愿望。

我的问题 除了位置兼容性之外,一切都很好。 如果有人有 4 个 1920 宽度的显示器,我如何将我的参考/起始帧放置在最左侧的显示器上,以便我可以说“继续 1920 像素,制作一个帧,......”? 你会想“使用 setLocationtoNull,但它是如何工作的?你会认为它只是中间显示器,长度/2;但是中间显示器是什么!?它不能是 totalScreensLength/2,因为那意味着程序在监视器之间分成两半!(所以它很可能是主监视器的中间)。 并且不使用任何 setLocations,程序位于主监视器的左上角......但是什么是主监视器??

如果我知道 java 如何判断哪个监视器是“主”,那将解决我的问题(不,仅通过 Toolkit.getScreenSize() 知道主监视器分辨率是不够的) .

    //creating invis black frames
for(int c=0;c<inArr.length;c++){
    int xLoc=0;
    for(int i=0;i<c;i++){
/**/    xLoc+=resList[i];
    }System.out.println(xLoc);

    JFrame blackOut=new JFrame();
    blkList.add(blackOut);
    blackOut.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    blackOut.getContentPane().setBackground(Color.BLACK);
    blackOut.setUndecorated(true);
                    
    blackOut.setSize(resList[c],5000);
/**/blackOut.setLocation(xLoc-1280,-2000);
                    
    blackOut.setVisible(false);
}

这是使程序运行的代码,因为它是针对我设置的 1280、1920、1440 进行硬编码的。 问题出在 blackOut.setLocation(xLoc-1280,-2000); 我必须知道起始帧的确切位置,以便我可以将帧向左移动,以便“缩放”起作用。这是这里发生的事情: 框架从我中间的 1920 显示器的左上角开始,因此我将框架向左移动 1280 像素,使其位于我最左侧显示器的左上角

对不起,如果这太冗长了,只是想提供足够的细节。 另外,recently discovered this 并进入了它的文档,但我不明白我如何使用这些数据,并且不确定它是否能够为我提供必要的信息(知道哪个监视器是主要的,并且能够区分显示器,即使它们的分辨率相同)

解决方法

这可能是部分答案。 从您的链接发现中,您可以通过调用 graphicsDevice.getDefaultConfiguration().getBounds() 获取每个设备的默认配置和边界。这包括每个屏幕的坐标/偏移量以及单个屏幕尺寸。 在 GraphicsEnvironment.getScreenDevices() by SunGraphicsEnvironment 的实现中,通过迭代屏幕数量并为每个索引创建一个设备来创建屏幕设备 - 将索引传递给每个设备。