如何在 JavaFX 中获取系统 DPI?

How to get system DPI in JavaFX?

自 Java 8u60 以来,JavaFX 似乎隐式地根据当前系统 DPI 缩放所有坐标。

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

但是,Screen.getPrimary().getDpi()还是returns96,可能是因为屏幕的DPI并没有真正改变,只是系统DPI设置。

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

缩放是单独管理的,例如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!