使用自定义字体而不安装

时间:2019-03-11 23:54:18

标签: java

我想在项目中使用(几种)自定义字体。这是代码段:

package Panes;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class MainPane extends GradientBackground {

private static final long serialVersionUID = 1L;

public MainPane() {

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    try {
        ge.registerFont(
                Font.createFont(Font.TRUETYPE_FONT, getClass().getResourceAsStream("fonts/space age.ttf")));
    } catch (FontFormatException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    JFrame frame = new JFrame();
    frame.setSize(1500, 750);
    frame.setLocationRelativeTo(null);
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
    setBorder(new EmptyBorder(115, 50, 50, 50));
    frame.setUndecorated(true);
    frame.setContentPane(this);

    JLabel compName = new JLabel("O-Nut Industries");
    compName.setForeground(Color.YELLOW);
    compName.setFont(new Font("Space Age", Font.PLAIN, 86));
    compName.setAlignmentX(Component.CENTER_ALIGNMENT);

    JLabel divName = new JLabel("Aerospace Division");
    divName.setForeground(Color.YELLOW);
    divName.setFont(new Font("Space Age", Font.PLAIN, 38));
    divName.setAlignmentX(Component.CENTER_ALIGNMENT);

    JLabel progName = new JLabel(" Automated Launch System ");
    progName.setForeground(Color.YELLOW);
    progName.setFont(new Font("Enter The Grid", Font.PLAIN, 64));
    progName.setAlignmentX(Component.CENTER_ALIGNMENT);

    JButton launchBtn = new JButton("LAUNCH");
    launchBtn.setBackground(Color.GREEN);
    launchBtn.setFocusable(false);
    launchBtn.setFont(new Font("neuropol", Font.PLAIN, 68));
    launchBtn.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            frame.setContentPane(new LaunchPane(frame));
            frame.setVisible(true);
        }
    });

    JButton abortBtn = new JButton("ABORT");
    abortBtn.setBackground(Color.RED);
    abortBtn.setFocusable(false);
    abortBtn.setFont(new Font("neuropol", Font.PLAIN, 68));
    abortBtn.setMaximumSize(launchBtn.getPreferredSize());

    abortBtn.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            new AbortPane();
        }
    });

    add(compName);
    add(divName);
    add(Box.createRigidArea(new Dimension(0, 100)));
    add(progName);
    add(Box.createRigidArea(new Dimension(0, 100)));
    JPanel btnPane = new JPanel();
    btnPane.setLayout(new BoxLayout(btnPane, BoxLayout.LINE_AXIS));
    btnPane.add(launchBtn);
    btnPane.add(Box.createRigidArea(new Dimension(15, 0)));
    btnPane.add(abortBtn);
    btnPane.setOpaque(false);
    add(btnPane);
    frame.setVisible(true);
}

public static void main(String[] args) {
    init();
}

static void init() {
    new MainPane();
}
}

在成功使用此方法之前,但是由于某种原因,我收到了“ java.io.IOException:读取字体数据时出现问题。”。资源文件夹(字体)是使用我的项目文件夹作为父文件夹创建的,因此我几乎肯定路径是正确的。我在这里缺少简单的东西吗?

谢谢。

编辑-

这是堆栈跟踪:

java.io.IOException: Problem reading font data.
at java.awt.Font.createFont0(Unknown Source)
at java.awt.Font.createFont(Unknown Source)
at Panes.MainPane.<init>(MainPane.java:30)
at Panes.MainPane.init(MainPane.java:107)

我在x86系统和Eclipse IDE 18-09上使用的是Win 10和Java SE v 8。

EDIT2-

因此,我通过获取.ttf文件并将其直接放入我的src文件夹,然后删除路径的fonts /部分来使其正常工作,如下所示:

getResourceAsStream("space age.ttf")

给我的印象是文件路径将相对于项目文件夹而不是src文件夹,但我想不是。无论哪种方式,现在都可以使用。谢谢大家。

0 个答案:

没有答案