默认位置如何工作? / 默认监视器是什么?
How does default location work? / What is the default monitor?
我正在开发一些获取用户多显示器宽度的应用程序,假设他们顶部没有任何显示器,然后为他们提供多个 buttons/frames,这样他们就可以黑出他们想要的任何显示器。
我的问题
除了位置兼容性之外,一切都很好。
如果有人有 4 个 1920 宽度的显示器,我如何将我的 reference/starting 帧放在最左边的显示器上,这样我就可以说“继续 1920 像素,制作一个帧,...”?
你会想“使用 setLocationtoNull,但它是如何工作的??你会认为它只是中间监视器,length/2;但中间监视器是什么!?它不可能是 totalScreensLength/2,因为那意味着程序在监视器之间被分成两半!(所以它很可能是主监视器的中间)。
并且不使用任何 setLocations,该程序位于主监视器的左上角....但是什么是主监视器??
如果我知道 java 如何确定哪个显示器是“主显示器”,那将解决我的问题(不,仅通过 [= 知道主显示器分辨率11=] 信息不够)。
//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);
我必须知道起始帧的确切位置,这样我就可以将帧向左移动,这样 'scaling' 就可以了。这就是这里发生的事情:
该框架从我中间的 1920 显示器的左上角开始,所以我将框架向左移动 1280 像素,使其位于我最左边的显示器的左上角。
抱歉,如果这太冗长,我只是想提供足够的细节。
此外,recently discovered this 并查看了它的文档,但我不明白如何使用这些数据,并且不确定它是否能够为我提供必要的信息(知道什么是主要的监视器,并且能够区分显示器,即使它们的分辨率相同)
这可能是一个部分答案。
从您的链接发现中,您可以通过调用 graphicsDevice.getDefaultConfiguration().getBounds()
获取每个设备的默认配置和边界。这包括每个屏幕的坐标/偏移量以及单个屏幕尺寸。
在 GraphicsEnvironment.getScreenDevices()
by SunGraphicsEnvironment
的实现中,屏幕设备是通过迭代屏幕数量并为每个索引创建一个设备来创建的——索引被传递给每个设备。
我正在开发一些获取用户多显示器宽度的应用程序,假设他们顶部没有任何显示器,然后为他们提供多个 buttons/frames,这样他们就可以黑出他们想要的任何显示器。
我的问题 除了位置兼容性之外,一切都很好。 如果有人有 4 个 1920 宽度的显示器,我如何将我的 reference/starting 帧放在最左边的显示器上,这样我就可以说“继续 1920 像素,制作一个帧,...”? 你会想“使用 setLocationtoNull,但它是如何工作的??你会认为它只是中间监视器,length/2;但中间监视器是什么!?它不可能是 totalScreensLength/2,因为那意味着程序在监视器之间被分成两半!(所以它很可能是主监视器的中间)。 并且不使用任何 setLocations,该程序位于主监视器的左上角....但是什么是主监视器??
如果我知道 java 如何确定哪个显示器是“主显示器”,那将解决我的问题(不,仅通过 [= 知道主显示器分辨率11=] 信息不够)。
//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);
我必须知道起始帧的确切位置,这样我就可以将帧向左移动,这样 'scaling' 就可以了。这就是这里发生的事情:
该框架从我中间的 1920 显示器的左上角开始,所以我将框架向左移动 1280 像素,使其位于我最左边的显示器的左上角。
抱歉,如果这太冗长,我只是想提供足够的细节。 此外,recently discovered this 并查看了它的文档,但我不明白如何使用这些数据,并且不确定它是否能够为我提供必要的信息(知道什么是主要的监视器,并且能够区分显示器,即使它们的分辨率相同)
这可能是一个部分答案。
从您的链接发现中,您可以通过调用 graphicsDevice.getDefaultConfiguration().getBounds()
获取每个设备的默认配置和边界。这包括每个屏幕的坐标/偏移量以及单个屏幕尺寸。
在 GraphicsEnvironment.getScreenDevices()
by SunGraphicsEnvironment
的实现中,屏幕设备是通过迭代屏幕数量并为每个索引创建一个设备来创建的——索引被传递给每个设备。