如何在 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!
自 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!