问题描述
我有一个Eclipse RCP应用程序,其中使用ChartFactory创建了一个XY折线图。该应用程序是使用Oracle JDK 8开发的。在其中,Jfree图表运行良好。现在,当我尝试将应用程序移植到OpenJDK 14时,图表中的所有元素都按1.25缩放。该应用程序的其余部分没有引起任何问题。我试图在Jfreechart论坛中找到解决方案,但无法解决该问题。
我创建的SWT合成内没有显示基本完整的图表。但是,如果我还原应用程序,则会显示完整的图表,并且如果我最大化应用程序,则将保留完整的图表。
如果任何人在移植应用程序时遇到相同的问题,请让我知道修复程序。
预先感谢
解决方法
这是因为 Swing(我假设您使用的是 SWT_AWT)自 Java 9 以来具有连续的规模。
见:https://news.kynosarges.org/2019/03/24/swing-high-dpi-properties/
你可以在 RCP 中用这样的方式同步 Swing 和 SWT 在 ApplicationWorkbenchWindowAdvisor 类启动时的 preWindowOpen() 方法中 适用于 Windows 和 Linux(在 MacOSX 上不需要)。
int deviceZoom = DPIUtil.getDeviceZoom();
double zoom = deviceZoom / 100.0;
System.setProperty("sun.java2d.uiScale",Double.toString(zoom));
当然,您必须针对高 dpi 屏幕相应地检测和编辑它。