Java无法从文件加载自定义字体并将JTextArea的字体设置为该字体

时间:2018-11-18 08:30:15

标签: java fonts

因此,我试图制作一个简单的应用程序,然后出现一个窗口。问题是我需要一些特殊的字体,我怀疑该字体是否会安装在用户的操作系统上,所以我必须从文件中加载它。

我已经读了无数的文章,并且在这个问题上停留了很长时间,而且我不确定字体是否未加载或未注册。我也对要使用的“流”的类型感到困惑,因为无数次尝试InputStreamFileInputStreamBufferStream都没有结果。

正在将字体 复制到输出目录。这是我的项目结构

<packages-with-classes>
fonts
 -> gameFont.ttf

这是我正在使用的代码

    displayArea = new JTextArea();
    displayArea.setEditable(false);

    //FONT to give graphics (plz help me)
    GraphicsEnvironment ge = null;
    try {
        //ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        /*Font initFont = Font.createFont(Font.TRUETYPE_FONT, Main.class.getClassLoader().getResourceAsStream("/fonts/gameFont.ttf") );
        Font fontBase = initFont.deriveFont(Font.PLAIN, 20);*/
        Font gameFnt = Font.createFont(Font.TRUETYPE_FONT, Main.class.getClassLoader().getResourceAsStream("fonts/gameFont.ttf")).deriveFont(Font.PLAIN, 12f);
        GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(gameFnt);
        displayArea.setFont(gameFnt);
    } catch (IOException e) {
        e.printStackTrace();
    } catch(FontFormatException e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

因此,在经历了非常非常头痛之后,我才开始工作:)

以下是其他人遇到相同问题的代码:

InputStream fontStream = Main.class.getResourceAsStream("/fonts/gameFont.ttf");
try {
    Font gameFont = Font.createFont(Font.TRUETYPE_FONT,fontStream);
    gameFont=gameFont.deriveFont(Font.PLAIN, 14);
    displayArea.setFont(gameFont);
} catch (FontFormatException | IOException e) {
    e.printStackTrace();
}