如何在 JavaFX 中获取系统 DPI?

Posted

技术标签:

【中文标题】如何在 JavaFX 中获取系统 DPI?【英文标题】:How to get system DPI in JavaFX? 【发布时间】:2016-04-28 07:08:57 【问题描述】:

从 Java 8u60 开始,JavaFX 似乎会根据当前系统 DPI 隐式缩放所有坐标。

例如,如果 Windows DPI 设置从 100% (96 DPI) 更改为 200% (192 DPI),JavaFX 使所有组件的大小达到预期的两倍。无论坐标是以 em 单位还是以像素为单位给出,都是如此。

但是,Screen.getPrimary().getDpi() 仍然返回 96,可能是因为屏幕的 DPI 实际上并没有改变,只有系统 DPI 设置。

如何获取 JavaFX 用来缩放组件的系统 DPI 值?

【问题讨论】:

【参考方案1】:

缩放是单独管理的,例如在 Windows 上为 125%:

Screen screen = Screen.getPrimary();
double dpi = screen.getDpi();
double scaleX = screen.getOutputScaleX();
double scaleY = screen.getOutputScaleY();

System.out.println("DPI: " + dpi + " - scaleX: " + scaleX + " - scaleY: " + scaleY);

输出:

DPI: 96.0 - scaleX: 1.25 - scaleY: 1.25

编辑 从 Java 9 开始!

【讨论】:

以上是关于如何在 JavaFX 中获取系统 DPI?的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX:Robot高DPI截图

如何在 JavaFX 中获取鼠标的位置?

如何在 Eclipse 中获取 Javafx 9?

如何在 JavaFX 中获取 Stage 的窗口句柄 (hWnd)?

如何在 JavaFx 的可编辑 ComboBox 中获取输入值?

如何通过 TWAIN 获取扫描仪当前的 DPI 设置?