将字体添加到Swing应用程序并包含在包中

时间:2012-10-21 14:13:08

标签: java swing fonts awt embedded-resource

我需要在Java Swing应用程序中使用自定义字体(ttf)。如何将它们添加到我的包中并使用它们?

同时,我只是在windows中安装它们然后我使用它们,但我不希望应用程序的使用会如此复杂,在使用之前告诉用户安装字体并不是很方便我的申请。

3 个答案:

答案 0 :(得分:19)

您可以通过InputStream

加载它们
InputStream is = MyClass.class.getResourceAsStream("TestFont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, is);

此加载的字体没有预定义的字体设置,因此您必须这样做:

Font sizedFont = font.deriveFont(12f);
myLabel.setFont(sizedFont);

请参阅:

Physical and Logical Fonts

答案 1 :(得分:7)

正如Reimeus所说,你可以使用InputStream。您还可以使用File

File font_file = new File("TestFont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, font_file);

在这两种情况下,您都可以将字体文件放在项目的根目录或某个子目录中。根目录应该是运行程序的目录。例如,如果您有一个目录结构,如:

My_Program
|
|-Fonts
| |-TestFont.ttf
|-bin
  |-prog.class

您可以使用My_Programjava bin/prog目录运行您的程序。然后在您的代码中,传递给InputStreamFile的文件路径和名称将为"Fonts/TestFont.ttf"

答案 2 :(得分:0)

试试这个:

@Override
public Font getFont() {
    try {
        InputStream is = GUI.class.getResourceAsStream("TestFont.ttf");
        Font font = Font.createFont(Font.TRUETYPE_FONT, is);
        return font;
    } catch (FontFormatException | IOException ex) {
        Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
        return super.getFont();
    }
}