如何在Java中使用自定义字体?

时间:2011-04-13 16:16:52

标签: java fonts

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

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

如果有可能,怎么样?

4 个答案:

答案 0 :(得分:45)

如果在包中包含字体文件(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
}

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

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

答案 1 :(得分:11)

我是这样做的!

//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);

答案 2 :(得分:8)

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

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

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

答案 3 :(得分:5)

如果您想使用font2d或类似字体绘制字体,可以使用:

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