我目前正在开发一个涉及 Swing GUI 的小型 Java 应用程序。在我的开发 PC 上,一切看起来都很好,但当我在 MS Surface 上运行它时,某些图标对于组件来说似乎太大(或者组件对于图标来说太小)。
这就是我的意思:
Google 研究让我得出结论,这是由于 Surface 的高分辨率和 Win8 的缩放功能让某些项目显得更大一些。所以我将缩放重置为 100%,它实际上修复了不良缩放问题。
不幸的是,这并不能真正解决我的问题。如果没有变焦,一切都太小了,所以我宁愿不禁用它。但有什么巧妙的方法可以解决这个问题吗?我可以“取消缩放”我的程序或 Java 的图标吗?理想情况下,我什至希望升级整个框架,因为一切都相当小。
编辑:显然,我也尝试过调整实际 JFrame 的大小,但它对对话框大小没有影响。我通过以下方式调用对话框
JOptionPane.showMessageDialog(frame, msg, "Information", JOptionPane.INFORMATION_MESSAGE);
顺便一提。
这是一个令人讨厌的、hacky 的快速修复解决方案,它将通过将 Swing 自己的图标大小调整到 80% 来停止令人讨厌的裁剪。
In 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)