Java Swing-graphicsConfiguration.getBounds():辅助屏幕的原点错误(高DPI显示!)

时间:2018-07-10 09:49:16

标签: java swing awt screen bounds

我正在扩展桌面环境中使用Windows 10(64位)。主屏幕属于我的笔记本,原始分辨率为1920x1080。辅助屏幕是3840x2160分辨率的高DPI显示屏。后者位于笔记本电脑的右侧:

Configuration dialog of extended desktop

JAVA JDK是10.0.1。 对两个GraphicsDevice(==屏幕)使用getDisplayMode(),两种分辨率均可正确显示:

GraphicsDevice 1-displayMode:1920x1080x32bpp @ 60Hz

GraphicsDevice 2-displayMode:3840x2160x32bpp @ 30Hz

但是在读取屏幕边界时(GraphicsConfiguration.getBounds())...

GraphicsDevice 1-范围:java.awt.Rectangle [x = 0,y = 0,width = 1920,height = 1080]

GraphicsDevice 2-范围:java.awt.Rectangle [x = 960,y = -540,width = 1920,height = 1080]

...屏幕2给出的起点似乎不正确。 x = 960应该标记主屏幕(1)的垂直中心线,而不是辅助屏幕(位于笔记本计算机的右侧!)中任何内容的起点。

我怀疑这与JAVA在High-DPI显示器上的自动缩放有关。我通过GraphicsConfiguration.getDefaultTransform()。getScaleX()/ getScaleY()获得的缩放因子是:

getScaleX():2.000000,getScaleY():2.000000(<--- GraphicsDevice 2)

这解释了为什么就JAVA而言,我的High-DPI显示器的尺寸是原来的一半。为了获得可读的字体等,这是有意义的。 但是至少起点的x-x = 960,y = -540-似乎是错误的。相反,应该是x = 1920。

(顺便说一句,当次屏幕位于主屏幕下方时,会出现类似的问题(无论如何,我想这也是一个问题。然后我得到y = 540的边界。)

0 个答案:

没有答案