仅使用公共API在JavaFX中获取屏幕比例

时间:2016-02-22 13:48:14

标签: java svg javafx-8

我正在尝试创建一个将SVG文件显示为图像的JavaFX库,可以使用所有Java 8版本:https://github.com/codecentric/javafxsvg

问题是它使用java.fx.Screen的renderScale属性,这是私有的,在公共API中似乎没有直接或间接访问器。

在大多数情况下,该值为1.0f,对于Mac上的Retina显示,该值可以是2.0f。

com.sun.javafx.tk.quantum.QuantumToolkit.getMaxRenderScale();

这给出了我想要的值,但是在com.sun包中,因此不在公共API中,并且可以在次要版本之间更改(并且DO更改,请参阅下面的重命名)。

com.sun.glass.ui.Screen.getRenderScale();

不在公共API中,并且在以前的版本中被命名为getScale()。

对此后续访问者进行相同的重命名,其目的是公开内部属性!

com.sun.javafx.stage.ScreenHelper.getScreenAccessor(Screen).getRenderScale();
// was ScreenHelper.getScreenAccessor(Screen).getScale()  in previous version

如果我使用这些内部API,它可以用于上一个版本:1.8.0_74,但是对于某些先前版本(例如1.8.0_51)给出NoSuchMethodError。

如何让它适用于jre的所有java 8版本?

请注意,我尝试使用天真的方法从dpi计算它,但我应该只得到舍入值(1.0或2.0)并且我没有规模计算的规则。

1 个答案:

答案 0 :(得分:1)

我为自己写了一个帮助方法。

Wrokbook

这是一种蛮力的做法,但我还没有找到更好的方法。