我想在项目中使用(几种)自定义字体。这是代码段:
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文件夹,但我想不是。无论哪种方式,现在都可以使用。谢谢大家。