如何调整Java Swing GUI适配不同分辨率与高DPI屏幕?
这个问题是高DPI屏幕下Java Swing默认未适配系统缩放导致的,可根据你使用的Java版本选择对应解决方案:
解决方案
方案1:Java 9及以上版本适配
Java 9及更高版本已经内置Windows高DPI缩放支持,两种配置方式可选:
- 运行JAR时添加启动参数:
java -Dsun.java2d.uiScale=2 -jar 你的jar包名称.jar
2对应Surface Pro常用的200%系统缩放比例,你也可以根据实际显示效果调整为1.5、2.5等数值。
- 直接在代码中添加配置,放在main方法最开头执行即可:
public static void main(String[] args) { // 高DPI缩放配置,必须放在所有Swing初始化代码之前 System.setProperty("sun.java2d.uiScale", "2"); FoxAid foxAid = new FoxAid("Fox Aid"); foxAid.setVisible(true); }
方案2:Java 8版本适配
Java 8没有内置高DPI支持,可手动全局修改组件默认字体和窗口尺寸:
public static void main(String[] args) { try { // 统一放大所有组件字体到2倍大小 Font customFont = new Font("微软雅黑", Font.PLAIN, 28); UIManager.put("Button.font", customFont); UIManager.put("ToolBar.font", customFont); UIManager.put("TextArea.font", customFont); UIManager.put("Panel.font", customFont); // 项目后续新增的组件类型都可在这里补充对应配置 } catch (Exception e) { e.printStackTrace(); } FoxAid foxAid = new FoxAid("Fox Aid"); // 手动指定窗口初始大小,替换原来的pack()自动适配 foxAid.setSize(1200, 800); // 窗口居中显示 foxAid.setLocationRelativeTo(null); foxAid.setVisible(true); }
打包优化建议
如果你后续要把JAR打包为EXE文件分发,可直接在exe4j、Launch4j等打包工具的配置项中添加JVM启动参数-Dsun.java2d.uiScale=2,用户双击运行即可自动适配高DPI屏幕,无需额外操作。
内容的提问来源于stack exchange,提问作者Gio
相关产品推荐
相关产品推荐

