【问题标题】:How can I use a custom font in Java?如何在 Java 中使用自定义字体?
【发布时间】:2011-08-04 20:56:02
【问题描述】:

我用 Java 编写了一个程序,它使用一种特殊字体,默认情况下在任何操作系统上都不存在该字体。

在 Java 中是否可以将这种特殊字体添加到操作系统中?例如,在 Windows 中,将此字体复制到特殊的 Fonts 文件夹中。

如果可以,怎么做?

【问题讨论】:

    标签: java fonts


    【解决方案1】:

    这就是我的做法!

    //create the font
    
    try {
        //create the font to use. Specify the size!
        Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("Fonts\\custom_font.ttf")).deriveFont(12f);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        //register the font
        ge.registerFont(customFont);
    } catch (IOException e) {
        e.printStackTrace();
    } catch(FontFormatException e) {
        e.printStackTrace();
    }
    
    //use the font
    yourSwingComponent.setFont(customFont);
    

    【讨论】:

    • 你不能直接调用 ge.registerFont 变量 customFont 作为它的参数来阻止过多的输入吗?
    • 您能否扩展一下答案?这与 dogbane 提供的解决方案有什么不同吗?需要打两次createFont吗?如果是,为什么?
    【解决方案2】:

    如果你想用 graphics2d 或类似的字体来绘制,这个可行:

    InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("roboto-bold.ttf")
    Font font = Font.createFont(Font.TRUETYPE_FONT, stream).deriveFont(48f)
    

    【讨论】:

    • 为了清楚起见,这里的48f 是作为浮点数传递的字体大小。如果您将它作为整数传递,则它无法正常工作,因为该方法需要诸如 Font.BOLD 之类的 int 常量。如果您使用单个字体的不同大小或样式,则可以从单个 Font 对象中派生所有这些。
    【解决方案3】:

    如果您在包中包含字体文件(otf、ttf 等),则可以通过此处描述的方法在应用程序中使用该字体:

    Oracle Java SE 6: java.awt.Font

    有一个来自 Oracle 的 tutorial available 显示了这个示例:

    try {
         GraphicsEnvironment ge = 
             GraphicsEnvironment.getLocalGraphicsEnvironment();
         ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
    } catch (IOException|FontFormatException e) {
         //Handle exception
    }
    

    我可能会将其包装在某种资源加载器中,但不会在每次您想使用它时从包中重新加载文件。

    与您的原始问题更密切相关的答案是将字体安装为应用程序安装过程的一部分。该过程将取决于您选择的安装方法。如果它不是桌面应用程序,您必须查看提供的链接。

    【讨论】:

    • 请在此处描述如何操作,而不仅仅是链接到另一个页面。
    • 我已经通过这种方式检查过,只有这个java程序可以列出/使用新字体,而其他并行java应用程序对此仍然未知。但是,如果您安装另一种名称与系统名称相似的字体,它可能会替换后者,并且其他应用程序可能会停止持续工作......我前几天遇到过。所以,永远不要在系统范围内安装新的东西,只有在你 100% 确定自己在做什么的情况下才这样做。
    【解决方案4】:

    Java tutorial,你需要创建一个新字体并在图形环境中注册:

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
    

    完成此步骤后,该字体可在对getAvailableFontFamilyNames() 的调用中使用,并可在字体构造函数中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 2017-01-01
      • 2011-08-02
      • 2013-12-14
      • 2012-06-19
      • 2014-01-23
      相关资源
      最近更新 更多