What font in Swing looks the same in all OS?
我在Windows 7下将Netbeans 7.0与JDK6一起使用来设计Java应用程序的用户界面。 我应用系统外观。 但是它在Windows中看起来像我想要的样子,但在MacOS中却有所不同,甚至更糟,在Linux中的不同窗口管理器(LXDE,GNOME,KDE,XFCE)中看起来也不同。
所谓的不同,是指字体的外观及其大小。 在Windows中,如果标签看起来是" v 1.23",则在其他操作系统中看起来像" v ...",因为该操作系统中的字体变大,并且JLabel没有足够的显示位置。 这发生在几个地方。
我不想增加标签宽度。 我希望标签在所有操作系统中的给定宽度下看起来都一样。 默认情况下,Netbeans在我的电脑上使用Tahoma 11pt字体。 我认为并非所有操作系统都提供此功能,因此其他操作系统使用不同的字体。
Arial是常见字体吗?
我应该手动将每个元素的字体更改为Arial吗? 还是其他选择?
而是使用布局管理器和逻辑字体系列。下面带有
Mac OS X:
Windows 7的:
Ubuntu Linux:
当涉及到窗口管理器时,除了字体大小以外,还有很多其他功能,例如,两个控件之间的宽度在gnome和KDE中的处理方式有所不同。当归结为在所有平台上都可以使用
这样做也会更好(如果您无法在要运行应用程序的操作系统中找到衬线),可以下载一种字体(来自GNU Free Fonts的免费字体)。
在设置字体大小和字体时,为什么不尝试使用主题并在那里设置字体...
您可以使用
这是外观上的链接
一个老问题,但是我找到了它,因为我正在寻找解决方案。
我的解决方案是:使用DejaVu字体。
Java对话框字体在Linux和Windows中看起来不同,但是DejaVuSans 12与Linux中的对话框字体非常相似,并且在Windows中(至少在Windows 8.1中)看起来相同。
我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ... static Font dejaVuSans; static final String resPath ="<classpath>/resources/"; // no leading"/" ... public static void main(String[] args) { /* See: * https://stackoverflow.com/questions/7434845/setting-the-default-font-of-swing-program * https://stackoverflow.com/questions/8361947/how-to-get-getclass-getresource-from-a-static-context */ dejaVuSans = null; Font f; try { InputStream istream = <ClassName>.class.getClassLoader().getResourceAsStream( resPath +"DejaVuSans.ttf"); dejaVuSans = Font.createFont(Font.TRUETYPE_FONT, istream); f = dejaVuSans.deriveFont(Font.PLAIN, 12); } catch (Exception e) { System.err.println(e.getMessage()); f = null; } if (f == null) f = new Font("Dialog", Font.PLAIN, 12); java.util.Enumeration keys = UIManager.getDefaults().keys(); while (keys.hasMoreElements()) { Object key = keys.nextElement(); Object value = UIManager.get (key); if (value != null && value instanceof javax.swing.plaf.FontUIResource) UIManager.put (key, f); } ... } |
当然,如果DejaVuSans.ttf未嵌入jar文件中,则可以在运行时将其导入。请参阅如何导入字体?。
Lucida Sans Regular始终与Java捆绑在一起,但是我认为它不能解决某些文本/标签格式不正确的问题。这还取决于用户的屏幕重新分配。