2
如何可靠地找出我的JavaFX程序是否在視網膜設備上運行以及使用了哪種像素縮放比例。調用類似如何查看我的程序是否在Retina屏幕上運行
System.out.println(Screen.getPrimary().getDpi());
剛剛在我的Mac上返回110。這只是實際物理數據的一半,所以Screen類提供的信息是無用的。
有沒有其他的方法來找出我在找什麼?
邁克爾
如何可靠地找出我的JavaFX程序是否在視網膜設備上運行以及使用了哪種像素縮放比例。調用類似如何查看我的程序是否在Retina屏幕上運行
System.out.println(Screen.getPrimary().getDpi());
剛剛在我的Mac上返回110。這只是實際物理數據的一半,所以Screen類提供的信息是無用的。
有沒有其他的方法來找出我在找什麼?
邁克爾
我想我現在可以回答我自己的問題。官方似乎沒有任何方法可以找出屏幕的物理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。
你使用的是什麼java版本? – Inge 2015-03-03 05:18:42
我正在使用JDK8u31 – mipa 2015-03-03 08:56:28
啊,好吧,也許你會發現一些提示在這個[答案](http://stackoverflow.com/questions/26182460/javafx-8-hidpi-support) – Inge 2015-03-03 11:55:12