Javafx 如何确定我的程序是否在视网膜屏幕上运行
我如何才能可靠地确定我的JavaFX程序是否在视网膜设备上运行,以及使用了什么样的像素比例。打电话给Javafx 如何确定我的程序是否在视网膜屏幕上运行,javafx,dpi,retina,Javafx,Dpi,Retina,我如何才能可靠地确定我的JavaFX程序是否在视网膜设备上运行,以及使用了什么样的像素比例。打电话给 System.out.println(Screen.getPrimary().getDpi()); 在我的Mac上返回110。这正好是实际物理DPI的一半,因此Screen类提供的信息非常无用 有没有其他方法可以知道我在找什么 迈克尔我想我现在可以回答我自己的问题了。官方看来,似乎没有任何方法可以确定屏幕的物理DPI是什么。唯一的方法似乎是使用一些私有API,如以下示例所示: import j
System.out.println(Screen.getPrimary().getDpi());
在我的Mac上返回110。这正好是实际物理DPI的一半,因此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版本是什么?啊,好吧,也许您已经在这篇新文章中找到了一些提示,但我还没有在其中找到任何提示。不过还是要谢谢你。启动JavaFX9时,请使用屏幕上的或方法。@ItachiUchiha是的,我知道,但谢谢你在这里指出这一点。从JavaFX9开始,有一个新的公共API使这个问题和答案过时了。我不认为这个问题过时了。此外,因子仍然为2,因此答案也部分有效。您可能希望使用JavaFX9替代方案更新您的答案;)这在我的Mac上的Java8上不起作用。我得到了
java.lang.NoSuchMethodException:javafx.stage.Screen.getScale()
如今,在编写javafx应用程序时,谁还关心Java8?