如何可靠地确定我的JavaFX程序是否在视网膜设备上运行以及使用了什么像素缩放比例。调用类似
的内容System.out.println(Screen.getPrimary().getDpi());
在我的Mac上只返回110。这正是实际物理dpis的一半,因此Screen类提供的信息毫无用处。
还有其他方法可以找出我要找的东西吗?
迈克尔
答案 0 :(得分:2)
我想我现在可以回答我自己的问题了。在官方网站上似乎没有任何方法可以找出屏幕的物理DPI。唯一的方法似乎是使用一些私有API,如下例所示:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class PixelScaleTest extends Application {
public static double getPixelScale(Screen screen) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Method m = Screen.class.getDeclaredMethod("getScale");
m.setAccessible(true);
return ((Float) m.invoke(screen)).doubleValue();
}
@Override
public void start(Stage primaryStage) throws Exception {
try {
System.out.println("PixelScale: " + getPixelScale(Screen.getPrimary()));
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
| SecurityException e) {
e.printStackTrace();
}
Platform.exit();
}
public static void main(String[] args) {
launch(args);
}
}
使用像素比例因子,您可以计算物理DPI。在标准屏幕上,此因子应为1.0,在Mac Retina上应为2.0。