Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用自定义字体?_Java_Fonts - Fatal编程技术网

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

如何在Java中使用自定义字体?,java,fonts,Java,Fonts,我用Java编写了一个程序,它使用了一种默认情况下在任何操作系统上都不存在的特殊字体 在Java中是否可以将这种特殊字体添加到操作系统中?例如,在Windows中,将此字体复制到“特殊字体”文件夹 如果可能,如何使用?如果在软件包中包含字体文件otf、ttf等,则可以通过以下方法在应用程序中使用字体: Oracle提供的一个示例显示了此示例: try { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGra

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

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


如果可能,如何使用?

如果在软件包中包含字体文件otf、ttf等,则可以通过以下方法在应用程序中使用字体:

Oracle提供的一个示例显示了此示例:

try {
     GraphicsEnvironment ge = 
         GraphicsEnvironment.getLocalGraphicsEnvironment();
     ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
} catch (IOException|FontFormatException e) {
     //Handle exception
}
我可能会将其封装在某种资源加载器中,这样就不会在每次使用包时都从包中重新加载文件

与原始问题更密切相关的一个答案是在应用程序的安装过程中安装字体。该过程将取决于您选择的安装方法。如果不是桌面应用程序,您必须查看提供的链接。

从中,您需要创建新字体并在图形环境中注册:

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(customFont);
} 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)

请在这里描述如何做到这一点,而不仅仅是链接到另一个页面。我已经检查过,通过这种方式,只有这个java程序可以列出/使用新字体,而其他并行java应用程序对此一无所知。但是,如果你安装了另一种与系统字体名称相似的字体,它可能会取代后者,而其他应用程序可能会停止工作。。。这是我前几天遇到的。因此,永远不要在系统范围内安装新的东西,只有在100%确定自己在做什么的情况下才可以安装。难道你不能用变量customFont作为参数调用ge.registerFont来停止过度键入吗?你能稍微扩展一下答案吗?这与dogbane提供的解决方案不同吗?是否需要调用createFont两次?如果是,为什么?为了清楚起见,这里的48f是作为浮点传递的字体大小。如果将其作为整数传入,则它无法正常工作,因为该方法需要Font.BOLD等int常量。如果使用的是单个字体的不同大小或样式,则可以从单个字体对象派生所有字体。