如果你有一台DPI超过150的显示器(如Macbook Pro),你可能也会发现问题:Java Swing应用程序上的字体对于高DPI显示器来说太小了,我根本无法更改字体大小(它直接忽略Windows DPI,只显示*最原始的DPI-->96**)。我无能为力,只能改变屏幕分辨率,这绝对会让LCD上的一切变得模糊。
是的,我有一台笔记本电脑,有一个高DPI显示器,15.6英寸,1920x1080分辨率,一些Java桌面应用程序在我的笔记本电脑上看起来非常小,如MatLab,BurpSuite等。我已经在互联网上搜索了很长一段时间,但仍然找不到解决问题的方法。我知道我可以通过JRE_HOME/lib/font/fontconfig.properties.src
更改JRE字体,但我找不到任何地方来设置Java桌面字体的默认字体大小或DPI。
这个问题没有解决办法吗?你们有高DPI的显示器吗?你是如何使用这类应用程序的?Swing会放弃高DPI用户吗?
7条答案
按热度按时间6yoyoihd1#
我目前正在调查Windows上的这个问题。以下是我的发现:
大多数Swing外观和感觉根本不支持高DPI,甚至不支持Nimbus,尽管它应该是可伸缩的。我发现一些旧的博客文章说Nimbus最终可能会提供高DPI伸缩性,但显然这从未发生过。
一个例外是系统LAF,但在所有DPI设置下,其默认字体比实际系统字体小约10%。此外,必须按照此处所述明确选择系统:http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
在Swing中也没有可以设置的单一比例因子。特定的LAF必须提供代码来处理缩放。所以你能做的最好的选择就是选择系统,并希望它足够好。
然而,在我的系统上,JavaFX确实正确且自动地扩展到150%。如果可能的话,我建议您使用JavaFX来构建您的图形用户界面。
编辑:我制作了几个小测试程序,并拍摄了各种图形用户界面框架、Swing主题和DPI设置的比较屏幕截图。这可能会为阅读这个问题的人提供信息:http://kynosarges.org/GuiDpiScaling.html
lvjbypge2#
简而言之:您需要在JRE9+上运行它。
长长的答案:
这是因为Java运行时声明自己是“DPI感知的”,但并不真正支持AWT和Swing。Java应用程序的大小和呈现基于像素,而不是正确缩放,这包括HiDPI显示。无论如何,这个问题最近已经得到了解决。请参见问题JEP 263: HiDPI Graphics on Windows and Linux和upgrade。
因此,增加字体大小不起作用(因为它不会增加其他内容);JVM参数
-Dsun.java2d.dpiaware=false
不起作用(因为它实际上并不受支持);清单文件+注册表编辑(对于Windows)也不起作用。解决方案:您需要在JRE9+上运行它,因为它确实支持此功能。
wf82jlnq3#
这款answer解决了我的4K屏幕Ubuntu笔记本电脑上的问题。
在应用程序的配置文件中,我添加了
-Dsun.java2d.uiScale=2.5
Java参数,现在,在执行时,应用程序具有良好的伸缩性并且可以使用。9nvpjoqh4#
似乎在Linux(GTK)上,您可以通过在启动应用程序之前使用以下方法来缩放Apps DPI来解决这个问题。
(您也可以降低显示器分辨率,但这根本不是解决方案)。
dluptydi5#
在Linux上,根据我的实验,似乎不可能在任何Swing外观上进行伸缩。然而,使用涉及VNC vncdesk的黑客攻击是可能的。以下是我在vncDesk下运行
gradle --gui
的配置:.vncdesk/1/settings.ini
:.vncdesk/1/startup
:yftpprvb6#
我按照以下说明设法解决了这个问题:Link。
它是德语的,但我会翻译重要的东西。
创建此注册表项:
创建包含以下内容的清单文件:
将其复制到java.exe和javaw.exe所在的bin目录中,并将其命名为
java.exe.manifest
和javaw.exe.manifest
(您将有两个内容相同但名称不同的文件)。HTH。
伯恩德
50few1ms7#
正如*@demented hedgehog*所说,设置
GDK_SCALE=2
环境变量在Linux下确实有效。如果您使用的是JetBrainsIntelliJ,则可以在
Edit configurations > Build and Run > Enviroment variables
下为您的项目设置环境变量您可以在下面看到将GDK_SCALE=2放在哪里。