【问题标题】:Java Swing app looks tiny on high-DPI screen when it should be scaled to normal sizeJava Swing 应用程序在应该缩放到正常大小时在高 DPI 屏幕上看起来很小
【发布时间】:2019-03-02 08:27:51
【问题描述】:

如何使我的 Java Swing 应用程序 GUI 在高 DPI 屏幕上正确缩放给用户?

请参阅下面的屏幕截图。在顶部,您可以看到与 Ubuntu 的文件浏览器图标和 gedit 相比,该应用程序看起来多么小。在左下角,您可以大致看到应用程序的大小(并且在常规 DPI 监视器上看起来确实如此)。因此,我正在寻找一种在使用高 DPI 监视器时正确缩放应用程序 GUI 的方法。例如,gedit 在常规 DPI 和高 DPI 显示器上看起来是一样的。我希望我的应用具有这样的行为。

这是应用程序的源代码:https://github.com/baobabKoodaa/baopass

这是一个影响许多应用的极其常见的问题。我在 Ubuntu 上运行的大约一半的应用程序在没有用户任何操作的情况下正确缩放,另一半没有缩放并且看起来非常小。请注意,我主要是在寻找一种不需要用户操作的解决方案(尽管此时感谢任何帮助 - 我根本没有找到任何扩展它的方法)。

根据this,缩放应该已经可以开箱即用了。它没有。我不确定这是否是一个错误,或者除了在 Java 9 上运行应用程序之外我还应该执行一些额外的步骤吗?

【问题讨论】:

  • 哪个操作系统?你的命令行是什么样子的?
  • 我正在 Ubuntu 16.04 上进行测试。我主要是在寻找一种不需要用户额外操作的解决方案(尽管它也有助于找到一个扩展应用程序的命令。我确实尝试了你在另一个线程中提供的那个,java -Dsun.java2d.uiScale=2.5 -jar filename.jar不适合我。)。
  • 这个框架是什么:它是JFrame 吗? JDialogminimal reproducible example 可能会有所帮助。一个快速而肮脏的解决方案是始终将其设置为全屏,但我想你想要一个更干净的。
  • 如果 java 9 不是一个选项,我会尝试的第一件事是使用更高分辨率增加默认外观字体大小。
  • @c0der 这是一个JFrame。我实际上使用的是 Java 9,但它仍然没有扩展。我不能简单地增加字体大小等,因为我不想破坏常规 DPI 显示器的外观。

标签: java swing highdpi


【解决方案1】:

你必须告诉绘图库来放大应用程序。

GDK_SCALE=2 ./application

将在环境中设置适当的信息,小部件将按比例放大,以便每个像素有效地占用四个像素的足迹。

请注意,启动屏幕(如果您使用 Java 的启动屏幕支持)不会在加载整个 Swing 库后出现,因此无论您尝试何种设置,它都不会缩放。

在某些平台上,如 Fedora 的 Linux 发行版,也可以进行部分缩放,可以设置 GDK_SCALE=1.5。请记住,它不是普遍可用的,也不能设置为您可能想要的任何缩放比例。

最后,较旧的 JVM 完全忽略了此设置,因此如果您不使用 Java 9 或更高版本启动,它可能无法正常工作。而且,当然,针对旧 JVM 和不同操作系统进行调整的方式往往会有所不同(如果它们能正常工作的话)。

【讨论】:

  • 在问了这个问题 1.5 年后,我终于在我的机器上得到了这个工作。谢谢!我不确定为什么它现在可以工作(我在一年前尝试过 GDK_SCALE 并且它没有工作,但现在它工作了)。我将我的 JDK 更新到 13.0.2,也许就是这样......在过去 1.5 年的 Java 更新中刚刚修复了一些问题?
  • @AtteJuvonen 您是否尝试过使用 Java 8 的 GDK_SCALE=2。在 Linux 上我从来没有让它工作,我怀疑有些网站记录了 Java 9 的行为,其他网站复制了它,最后它被复制了进入假设 Java 8 的文档。我很久以前就深入研究了这一点,作为 Netbeans 的粉丝,并希望看到我正在编辑的代码(同时!):)
【解决方案2】:

看起来您使用的是 Linux。您可以使用命令行开关

java -Dsun.java2d.uiScale=2 -jar some_application.jar

来自https://wiki.archlinux.org/index.php/HiDPI#Java_applications

【讨论】:

  • 不幸的是,这不起作用(这已经在 OP 的 cmets 中讨论过)。
  • 我看到很多相互冲突的信息,这些信息可能取决于版本;仍然不能在 JRE 9 和 11 中工作?
  • 链接的文章还引用了 env var GDK_SCALE,这样行吗?
  • 它在 JRE 9 上不起作用。我没有尝试过 JRE 11。我现在尝试了 GDK_SCALE,但它也没有任何作用。
猜你喜欢
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 2018-05-26
  • 2021-05-31
相关资源
最近更新 更多