JavaFX Screen.getPrimary().getBounds() 返回不正确的屏幕尺寸

sha*_*iko 2 javafx

当尝试获取 Windows 设备上用户显示器的分辨率(不是像素数而是当前工作分辨率)时,我遇到了有趣的问题。Screen.getPrimary().getBounds()在几乎所有系统上返回正确的结果。Win 10 笔记本电脑有问题。即使它们是 4K 和全高清设备,它们的分辨率也被识别为 1280x768。

我还尝试了以下方法:

  • Toolkit.getDefaultToolkit().getScreenSize()
  • Screen.getScreens()然后遍历所有屏幕(只找到一个)
  • GraphicsDevice getDisplayMode().getWidth();
  • GraphicsEnvironment getScreenDevices()然后遍历所有屏幕(只找到一个)

我没有更多的想法了。是否有其他方法可以在所有 Windows 设备上正确获取屏幕分辨率?

mip*_*ipa 5

我既不了解您的设备,也不了解 Windows 10,但您应该记住一件事。报告的尺寸不是设备的物理像素尺寸。相反,会报告缩放后的大小。在 Windows 上,这取决于您设备的显示设置。例如,我的 Mac 的物理像素尺寸为 2880x1800,但报告的尺寸为 1440x900。根据您的设置,这并不总是正好是 2 的因数。

  • 我确认你是对的。当我尝试这个测试用例时,我设法获得了预期的不同值:`Toolkit.getDefaultToolkit().getScreenSize()` - 返回像素和`Screen.getPrimary().getBounds()` - 返回缩放值。我会接受你的答案作为正确的答案。谢谢。 (4认同)