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

Dan*_*anM 14 java fonts swing awt embedded-resource

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

平均同时,我简单地安装它们在Windows,然后我使用它们,但我不希望该应用程序的使用将是如此复杂,它`不是很方便地告诉用户使用我的应用程序之前安装的字体.

Rei*_*eus 19

您可以通过以下方式加载它们InputStream:

InputStream is = MyClass.class.getResourceAsStream("TestFont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, is);
Run Code Online (Sandbox Code Playgroud)

这个加载的字体没有预定义的字体设置,所以要使用,你必须这样做:

Font sizedFont = font.deriveFont(12f);
myLabel.setFont(sizedFont);
Run Code Online (Sandbox Code Playgroud)

看到:

物理和逻辑字体

  • 或者,如果它在包中,您可以通过完整包名访问它.例如:我在包_foo.bar.master.cork_中有ttf文件_foo.ttf_,我会通过`getResourceAsStream("/ foo/bar/master/cork/foo.ttf")来访问它.这意味着:在开头放一个正斜杠,用正斜杠替换每个点(文件名除外),并在路径末尾**但在文件之前使用正斜杠.** (2认同)

Mr.*_*urg 7

正如Reimeus所说,你可以使用InputStream.你也可以使用File:

File font_file = new File("TestFont.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, font_file);
Run Code Online (Sandbox Code Playgroud)

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

My_Program
|
|-Fonts
| |-TestFont.ttf
|-bin
  |-prog.class
Run Code Online (Sandbox Code Playgroud)

你将从My_Program目录中运行你的程序java bin/prog.然后在你的代码中传递给InputStreamFile将是的文件路径和名称"Fonts/TestFont.ttf".