添加监视器时Java确定屏幕实例

添加监视器时Java确定屏幕实例,java,screen,detection,monitor,Java,Screen,Detection,Monitor,当一个新的监视器被添加到已经运行JRE实例的PC或笔记本电脑上时,我们发现刚刚添加的监视器并不被认为是一个更大的虚拟屏幕的扩展,而是JRE创建了两个独立的虚拟屏幕(每个都有(0,0)与使用getScreenDevices()检索的设备列表关联的图形配置所指示的左上角坐标。重新启动JRE修复了问题(即,这两个屏幕现在被视为具有单独起始坐标的较大虚拟屏幕的一部分) 我的问题是:在以下情况下,如何正确确定当前显示Java小程序的监视器(GraphicsDevice)实例: 1.用户将显示器添加到其PC

当一个新的监视器被添加到已经运行JRE实例的PC或笔记本电脑上时,我们发现刚刚添加的监视器并不被认为是一个更大的虚拟屏幕的扩展,而是JRE创建了两个独立的虚拟屏幕(每个都有(0,0)与使用getScreenDevices()检索的设备列表关联的图形配置所指示的左上角坐标。重新启动JRE修复了问题(即,这两个屏幕现在被视为具有单独起始坐标的较大虚拟屏幕的一部分)

我的问题是:在以下情况下,如何正确确定当前显示Java小程序的监视器(GraphicsDevice)实例: 1.用户将显示器添加到其PC/笔记本电脑 2.用户拖动运行小程序的浏览器窗口,并将其重新定位到新屏幕中。 3.任何JDialog或其他框架都需要在新屏幕中打开,但这只能在我们能够自动检测小程序重新定位的屏幕实例时才能完成

如前所述,简单地对照各种屏幕的图形配置边界检查Java小程序的位置是不起作用的,因为边界都从(0,0)开始


我不希望我的用户或客户仅仅因为添加了一个新的监视器就必须杀死并重新启动他们的Java.exe,这样JRE就可以将屏幕实例正确地融合到单个虚拟屏幕中。有什么想法吗?

如果在
JDialog
s上使用会发生什么?您已经在确定是否添加了另一个屏幕,对吗?如果强制新的GraphicsDevice调整其分辨率,会发生什么情况?(当然是同一件事)这会迫使JRE更新虚拟屏幕吗?Jeffrey:没有使用setLocationByPlatform(),但它似乎在底层操作系统的默认位置放置了一个新窗口,该窗口可能与我的应用程序当前放置的位置不在同一监视器或屏幕上。因此需要明确地确定这一点。克里斯托弗:虽然我可以检测到添加了一个新的监视器,但我无法区分它的虚拟坐标与以前的监视器,因为它们都从(0,0)开始。你知道一个特定的函数会迫使JRE重新枚举图形设备并创建一个更大的虚拟屏幕吗?