JavaFX 8 HiDPI支持

问题描述 投票:23回答:2

我刚刚在Arch Linux的4k屏幕上尝试了JavaFX Hello World Example,但不幸的是,GUI无法缩放。

documentation

Hi-DPI支持。 JavaFX 8现在支持Hi-DPI显示。

那么如何使我的应用程序dpi知道?

java javafx-8 hdpi
2个回答
33
投票

各种设备上的Hi-DPI支持

对于带有视网膜显示屏的OS X Mac,它应该“正常工作”-JavaFX知道Hi-DPI Mac,并将适当缩放UI。如果将VBox中的间距设置为8,则这是与设备无关的单位。在非视网膜显示屏的Mac上,它将占用8像素;在分辨率翻倍的视网膜显示屏上,间距将占用16像素。因为视网膜显示器还具有非视网膜显示器两倍的DPI和两倍的分辨率,所以无论使用哪种设备,该空间的物理屏幕尺寸都将相同。

对于Windows和Linux设备,您的结果可能不太令人满意,因为JavaFX 8u20当前默认情况下并不在此类设备上计算出任意DPI分辨率并适当地缩放。您可以做的是用css as em units(基于场景根默认字体的磅值)和similarly for fxml来执行大部分测量,然后根据具体情况适当设置场景根默认字体的磅值。您可以通过查询屏幕的DPI分辨率来确定。有关更多信息和示例代码,请参见此答案中的讨论:javafx automatic resizing and button padding

特定于Gnome

Gnome 3具有setting for the scaling factor,可以通过此命令进行控制:

gsettings set org.gnome.desktop.interface scaling-factor 2

您可以通过阅读用户的gnome配置文件设置来查询此缩放因子,并将其与查询屏幕DPI一起使用,以找出适当的缩放因子然后如何使用上述技术应用缩放。

只是个人轶事-几天前,当我尝试在Hi-DPI显示器上使用Gnome 3缩放功能(CentOS 7以及最新的Fedora版本)时,我发现在Linux下运行的应用程序中对Hi-DPI的总体支持变得很杂乱。当然,当我尝试这样做时,它对CentOS 6的支持有了很大的改进,但是要在窗口工具包,标准应用程序和第三方应用程序中获得高质量的Hi-DPI支持,还有很长的路要走。因此,我相信运行HiDPI Gnome桌面仍然是一件非常前沿的事情,绝对不适合所有人-我相信这种情况会随着时间而改变。

位图图像

由JavaFX团队负责人blog entry on Hi-DPI

在Apple的应用程序中(从带有视网膜显示屏的iPhone和iPad开始,解决方案是应用程序开发人员提供两张图片,而不是为每张图片提供一张图片。例如,初始屏幕将提供两张图像,一张为正常分辨率,另一张为2倍分辨率。这些文件的名称相同,但2x文件是根据某些约定命名的,因此在运行时,平台将在后台在视网膜上查找2x版本。这样,您的应用程序会显示“ fooImage.png”,但在具有视网膜显示的计算机上会查找“ [email protected]”。

我不知道用于Hi-DPI显示器的位图图像选择功能当前是否在Java 8u20中-您可能必须自己通过用screen.getDpi()查询屏幕,然后加载适当的位图来实现它。

4K设备

4K的像素很多。默认情况下,JavaFX将使用硬件加速图形管道。某些图形硬件可能未针对4K显示进行完全优化(例如,视频显存不足),这可能导致应用程序无法运行或性能不佳。我也不相信目前在研究各种4K设备上的JavaFX性能上付出了很多努力-可能“行得通”,但可能都不行。您需要在目标硬件上测试您的应用程序,以确定JavaFX应用程序在该硬件上运行时的当前功能。您可能还需要根据上面的一些建议来调整应用程序。

用户报告了使用JavaFX来显示4K视频时JavaFX 8u20的问题:

背景

在OS X下支持Hi-DPI比Windows / Linux设备简单(可能),因为目标设备是视网膜显示器或非视网膜显示器,其中一个是其他显示器的2倍,并且OS X系统的直接支持可以被用来帮助实现视网膜缩放。在Windows / Linux中,可能需要的是能够以不只是2倍的系数进行缩放的功能,并且该功能已由(当前未完成的和计划的)功能请求RT-32521 Support global coordinate scaling with DPI-based default涵盖。通常,按比例缩放比例可获得最佳可见效果。

其他资源

  • Kynosarges对JavaFX DPI Scaling的讨论。
  • JavaFX小组的工作负载写了一个blog on JavaFX on retina Macs(这有点过时了,因为JavaFX现在支持视网膜Mac。)>
  • Randahl对JavaFX: Designing for Multiple Resolutions的看法。
  • Apple对高分辨率设备在optimizing applications上有一些不错的建议,它不是JavaFX特有的,其中一些建议不适用于JavaFX,但是那里仍然有一些有用的通用原理和技术。
  • Hi-DPI设备编码的完整指南不在此特定答案的范围内-您可以在Google的各种网络资源中搜索以获取更多信息。

如果您对JavaFX的Hi-DPI支持还有其他疑问,建议您在openjfx-dev JavaFX developer mailing list上提问。

Wiki答案

此答案可能存在一些不一致或错误,并且可能会随着时间推移而变化。我做了答案社区维基。如果您了解JavaFX上对Hi-DPI的特定更正,设备和操作系统的限制或支持模型的支持,请随时编辑此答案或将其移至OpenJFX wiki(可能仍然属于该位置)。


0
投票

我遇到了同样的问题。我在Surface Pro 3中构建了javaFX应用程序,该应用程序无法缩放,但fxml应用程序可以缩放。然后我安装了jre8u221,没有替换它建议的更新版本。它解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.