根据操作系统分辨率和缩放比例重新调整 Java 中的字体大小

时间:2021-05-01 20:32:40

标签: java swing user-interface font-size highdpi

我使用的是 Kubuntu 21.04,屏幕分辨率为 2560x1440,全局比例为 150%,以使各种应用程序的字体大小和其他 GUI 元素足够大以供阅读。

不幸的是,这似乎并没有扩展到我的带有 Swing GUI 的 Java 程序的字体大小。

我创建了一个测试程序作为最小的可重现示例。一个普通的普通程序的主要功能创建了以下类的实例:

add -> Project Reference... -> Projects

Eclipse 中代码字体大小旁边的结果窗口的以下屏幕截图说明了大小问题。查看标签和按钮文本相对于框架中的字体大小和 Eclipse 代码文本的大小。

Screenshot of Java code and test window

我使用 OpenJDK 版本 12 进行编译,正如您在代码中看到的那样,调用 System 外观,尽管这显然会导致 Kubuntu 上的 Metal 外观。

我发现我可以通过在终端上编写类似 import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; @SuppressWarnings("serial") public class Test extends JFrame { Container c; public Test() { c = getContentPane(); this.setTitle("Test window"); JPanel panel = new JPanel(new BorderLayout()); panel.add(new JLabel("This is a test label. Consider the font size " + "relative to the frame title size."), BorderLayout.NORTH); panel.add(new JButton("This is a test button"), BorderLayout.SOUTH); c.add(panel); this.pack(); this.setLocationRelativeTo(null); this.setVisible(true); } } 的内容将应用程序的缩放比例从 100% 更改为 200%。但我想我的大多数用户不会从终端启动 JAR,并且像 java -jar -Dsun.java2d.uiScale=2 program.jar(150%)这样的值似乎不起作用。所以不是真正的解决方案。

在操作系统中缩放到 150% 后,如何将字体大小以及可能的其他 GUI 组件更改为操作系统的默认字体大小?我如何才能以独立于操作系统并符合用户设置的缩放比例的方式执行此操作?

编辑:我发现了一个 bug description about scaling issues for the JDK 并且想知道这是否是导致问题的原因。我使用的是 JDK 14,但错误描述是专门针对 17 的,所以不知道它是否也适用于 14。

我已经在虚拟机中的 Windows 7 中尝试过,并且缩放似乎有效,所以我认为这可能是 Linux(或 Unix?)的问题。但不确定。

0 个答案:

没有答案