【问题标题】:Cross-platform solution for Arial fontArial字体的跨平台解决方案
【发布时间】:2012-04-01 04:25:19
【问题描述】:

在我的 Swing 应用程序中,我使用 Arial 字体。不幸的是,它在不同平台上的呈现方式不同:

窗户:

Mac OS X:

Linux:

Windows 和 Mac OS X 变体看起来几乎相同。 Linux 完全不同,似乎根本不是 Arial。主要问题是字母的宽度不同...

在 Linux 上呈现类似于 Windows 变体的文本的最佳解决方案是什么?可能是一些替代字体,例如 Nimbus Sans L?

一些限制:JRE 不能随应用程序一起提供,它应该非常接近 Arial。

谢谢!

【问题讨论】:

  • pastebin.com/C6NcGP0t 您可以使用它来切换字体,或者您可以将其保存为图像并改为缓冲图像。
  • 如果要跨平台,就不要坚持同一个字体。你为什么要这样做?
  • @Raedwald,主要原因:字母宽度在某些地方破坏了布局。
  • "breaks layout" 修复布局。
  • 布局已经OK,不在讨论中。请坚持原来的问题。

标签: java swing fonts


【解决方案1】:

拥抱平台多样性。鉴于不同的平台有相似的字体和不同的度量,让每个组件通过不干涉和正确使用布局来计算自己的preferred size。这是一个不错的example 截图。

【讨论】:

  • 顺便说一句,选择像Font.SANS_SERIF这样的logical字体,而不是像Ariel这样的physical字体,是获得平台设计者最佳选择的便捷方式。
  • 但我使用的是自定义外观。并且在某些地方使用了绝对布局。切换到布局管理器不是我的选择。顺便说一句,您示例中的屏幕截图显示了丑陋且不符合人体工程学的设计。
  • 您的应用程序是否打算在多个平台上运行?
【解决方案2】:

一种解决方案可能是使用Font.createFont() 加载字体文件。 Here's 一个样本。

【讨论】:

  • 谢谢!您知道 Arial 许可证是否允许这样做吗?我认为必须先购买它才能将其捆绑到应用程序中。
  • 我认为您必须找到一种免费字体才能使用。 Arial font license 说你不能分发字体。但是网络上有很多免费字体,我相信你会找到适合的:)
【解决方案3】:

您是否尝试过抗锯齿,比如这篇文章 http://docs.oracle.com/javase/tutorial/2d/text/renderinghints.html

【讨论】:

  • 是的,实际上它在示例图像上启用。并且抗锯齿不会影响字母的宽度。
【解决方案4】:

您可以在 Linux 上安装 Microsoft 的免费字体并在 Java 中使用它们。这包括 Arial 字体。这篇博文向您展示了如何:How to Install Windows Fonts in Java on Linux

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2012-10-25
    • 2021-11-08
    相关资源
    最近更新 更多