Java 如何导入字体?

Java 如何导入字体?,java,fonts,awt,Java,Fonts,Awt,我想知道你如何导入字体 我正在尝试使用自定义下载的字体,但由于大多数要运行此功能的计算机都没有此字体,因为它不是默认字体。即使他们没有字体,我该如何让字体工作呢 我使用它在游戏屏幕上,需要显示一个分数,并希望分数文本是相同的字体。这是图像, 如果有关系,我的计算机上的字体名称是Terminal 编辑:我假设它必须在java文件的目录中有字体,并且会有某种方式使用它,但我不确定如何使用。还是有更好的办法 Edit2:我已经找到了一个很好的教程,介绍了如何使用它,但是我需要一些关于如何使用它的帮助

我想知道你如何导入字体

我正在尝试使用自定义下载的字体,但由于大多数要运行此功能的计算机都没有此字体,因为它不是默认字体。即使他们没有字体,我该如何让字体工作呢

我使用它在游戏屏幕上,需要显示一个分数,并希望分数文本是相同的字体。这是图像,

如果有关系,我的计算机上的字体名称是
Terminal

编辑:我假设它必须在java文件的目录中有字体,并且会有某种方式使用它,但我不确定如何使用。还是有更好的办法

Edit2:我已经找到了一个很好的教程,介绍了如何使用它,但是我需要一些关于如何使用它的帮助

编辑3:

URL fontUrl = new URL("http://www.webpagepublicity.com/" + "free-fonts/a/Airacobra%20Condensed.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
g.setFont(font);
错误消息

File: F:\Computer Science\draw.java  [line: 252]
Error: F:\Computer Science\draw.java:252: font is not public in java.awt.Component; cannot be accessed from outside package
以下是我正在尝试的:

URL fontUrl = new URL("http://img.dafont.com/dl/?f=badaboom_bb");
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
g.setFont(font);
编辑4:

File fontfile = new File("TexasLED.ttf");
File.toURI(fontfile).toURL(fontfile);
URL fontUrl = new URL("fontfile");
错误


您可以使用
GraphicsEnvironment.registerFont

)

使用此选项,您可以从.ttf文件加载字体:

private static final Font SERIF_FONT = new Font("serif", Font.PLAIN, 24);

private static Font getFont(String name) {
    Font font = null;
    if (name == null) {
        return SERIF_FONT;
    }

    try {
        // load from a cache map, if exists
        if (fonts != null && (font = fonts.get(name)) != null) {
            return font;
        }
        String fName = Params.get().getFontPath() + name;
        File fontFile = new File(fName);
        font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
        GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();

        ge.registerFont(font);

        fonts.put(name, font);
    } catch (Exception ex) {
        log.info(name + " not loaded.  Using serif font.");
        font = SERIF_FONT;
    }
    return font;
}

“Airacobra Condensed”字体可从中获得


我已经解决了我自己的问题。我已经做了

URL fontUrl = new URL("file:///F:/Computer_Science/TexasLED.ttf");

这指向字体,对我很有用

您也可以使用应用程序jar文件中嵌入的字体。多年来,我一直使用此功能在我的项目中加载字体

public Font getFont(String fileName) throws Exception {
    String path = "/xyz/isururanawaka/wb/fonts/" + fileName;
    URL url = getClass().getResource(path);
    return Font.createFont(Font.TRUETYPE_FONT, new File(url.toURI()));
}

您打算如何分发您的游戏:Java Web Start或特定于平台的本机操作系统安装程序?如果找不到字体名称,操作系统将尝试查找与其相近的字体名称。它被称为@eee,现在它将从编译器运行。这是学校的一个项目。而且我不希望字体经过替换,否则它看起来会很难看。@eee使用
文件
是对短视问题的短视回答。
Font
实际上是一种应用程序资源,因此应该通过URL(并将其转换为
InputStream
,以便在
createFont()
方法中使用)对其进行Jar和访问。@Fogest非法转义字符,嗯……您需要这样设置
“F:\\Computer Science\\Texas LED.ttf”
在Java中。我尝试使用以下方法:
URL-fontUrl=new-URL(“http://www.webpagepublicity.com/“+”免费字体/a/Airacobra%20Condensed.ttf”);Font Font=Font.createFont(Font.TRUETYPE_Font,fontUrl.openStream());GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();ge.registerFont(字体);}catch(异常e){}g.setFont(字体)
我得到了这个错误:
字体无法从外部软件包访问
@andreThompson如果用户无法从Internet加载字体,特别是当字体没有任何好的系统字体来替代它时,最好能想出一个回退机制。@eee(叹气)从网上加载
Font
不是重点,因为这不是我的建议。热链接到
字体
的行为仅仅是创建一个SSCCE。您是否有更好的方法来演示如何在“SC”(自包含)代码中加载自定义的
Font
?就我个人而言,我会将
Font
包含在一个Jar中,该Jar被添加到应用程序的运行时类路径中。@ylun.za“有什么想法吗?”提供一个失败的(最小的完整且可验证的示例)。“。还有其他网站可以使用这种方法吗?”从来没有人打算让“真实世界”的应用程序通过热链接到互联网网站来获取字体!下载字体并将其包含在一个应用程序jar中。@ylun.za我不会在该网站上搜索您提到的字体。如果你想让我试试,像我一样发布一个MCVE。@Mr.Pallazzo BTW-很抱歉,你的回答被人盗用了。我觉得应该是你的答案得到“滴答”。我刚刚把你的建议变成了一个SSCCE(或2个,有漂亮的屏幕截图)。
import java.awt.*;
import javax.swing.*;
import java.net.URL;

class DisplayFont {
    public static void main(String[] args) throws Exception {
        URL fontUrl = new URL("http://www.webpagepublicity.com/" +
            "free-fonts/a/Airacobra%20Condensed.ttf");
        Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
        font = font.deriveFont(Font.PLAIN,20);
        GraphicsEnvironment ge =
            GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(font);

        JLabel l = new JLabel(
            "The quick brown fox jumps over the lazy dog. 0123456789");
        l.setFont(font);
        JOptionPane.showMessageDialog(null, l);
    }
}
URL fontUrl = new URL("file:///F:/Computer_Science/TexasLED.ttf");
public Font getFont(String fileName) throws Exception {
    String path = "/xyz/isururanawaka/wb/fonts/" + fileName;
    URL url = getClass().getResource(path);
    return Font.createFont(Font.TRUETYPE_FONT, new File(url.toURI()));
}