gpt4 book ai didi

java - 高分辨率(MS Surface)上的不良 Swing UI 缩放

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:29 24 4
gpt4 key购买 nike

我目前正在开发一个涉及 Swing GUI 的小型 Java 应用程序。在我的开发 PC 上一切看起来都很好,但是当我在我的 MS Surface 上运行它时,一些图标似乎对于组件来说太大(或者组件对于图标来说太小)。

我的意思是:

scaling issue

谷歌研究让我得出结论,这是由于 Surface 的高分辨率和 Win8 的缩放功能让一些项目看起来更大一些。所以我将缩放比例重置为 100%,它实际上修复了糟糕的缩放比例。

不幸的是,这并不能真正解决我的问题。没有变焦,一切都太小了,所以我宁愿不禁用它。但是有什么聪明的方法可以解决这个问题吗?我可以只“取消缩放”我的程序或 Java 的图标吗?理想情况下,我什至想要放大整个框架,因为一切都相当小。

编辑:显然,我也尝试过调整实际 JFrame 的大小,但它对对话框大小没有影响。我通过

调用对话框
JOptionPane.showMessageDialog(frame, msg, "Information", JOptionPane.INFORMATION_MESSAGE);

顺便说一句。

最佳答案

这是一个讨厌的、hacky 的快速修复解决方案,它将通过将 Swing 自己的图标大小调整为 80% 来停止讨厌的裁剪。

main 中,添加:

String[] iconOpts = {"OptionPane.errorIcon", 
"OptionPane.informationIcon",
"OptionPane.warningIcon",
"OptionPane.questionIcon"};
for (String key : iconOpts) {
ImageIcon icon = (ImageIcon) UIManager.get(key);
Image img = icon.getImage();
BufferedImage bi = new BufferedImage(
img.getWidth(null), img.getHeight(null),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics g = bi.createGraphics();
g.drawImage(img, 0, 0,
(int) (img.getWidth(null) * 0.8),
(int) (img.getHeight(null) * 0.8), null);
ImageIcon newIcon = new ImageIcon(bi);
UIManager.put(key, newIcon);
}

您可能想先检查这是否真的需要 - Windows 8/10 默认为 125%,但有些人会将其切换回 100%。我还没有找到一种优雅的方法来做到这一点,但这些方面的一些东西会给你一个想法:

java.awt.Font font = (java.awt.Font) UIManager.get("Label.font");
if (font.getSize() != 11) {
//resize icons in here
}

关于java - 高分辨率(MS Surface)上的不良 Swing UI 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com