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

Mah*_*ine 44 java fonts

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

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

如果有可能,怎么样?

Cᴏʀ*_*ᴏʀʏ 48

如果您在您的包的字体文件(OTF,TTF等),您可以通过这里所描述的方法在应用程序中使用的字体:

Oracle Java SE 6:java.awt.Font

Oracle 提供了一个教程,显示了这个示例:

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

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

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

  • 请在此处描述如何操作,而不仅仅是链接到其他页面. (5认同)

Flo*_*tej 12

我是这样做的!

//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);
Run Code Online (Sandbox Code Playgroud)

  • 难道你不能以变量customFont作为参数调用ge.registerFont来停止过多的输入吗? (2认同)

dog*_*ane 8

Java教程中,您需要创建一个新字体并在图形环境中注册它:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
Run Code Online (Sandbox Code Playgroud)

完成此步骤后,字体在调用时可用getAvailableFontFamilyNames(),并可在字体构造函数中使用.


Hei*_*sch 6

如果你想使用font2d或类似的字体绘制,这适用:

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

  • 为清楚起见,此处的“48f”是作为浮点数传递的字体大小。如果你将它作为整数传入,它就不能正常工作,因为该方法需要诸如 `Font.BOLD` 之类的 int 常量。如果您使用单个字体的不同大小或样式,您可以从您的单个 `Font` 对象中派生所有这些。 (2认同)