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

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

在Java中可以添加这个特殊的字体到操作系统吗? 例如,在Windows中将此字体复制到特殊的“字体”文件夹。

如果可能的话,怎么样?

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

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

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

从Java教程中 ,您需要创build一个新的字体并将其注册到graphics环境中:

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

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

这是我做的!

 //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(Font.createFont(Font.TRUETYPE_FONT, new File("Fonts\\custom_font.ttf"))); } catch (IOException e) { e.printStackTrace(); } catch(FontFormatException e) { e.printStackTrace(); } //use the font yourSwingComponent.setFont(customFont); 

如果你想用字体绘制graphics2d或类似的,这个工程:

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

您可以从File或InputStream加载字体。 然后可以将其馈送到Component.setFont() (或类似的)方法以供使用。