Java 库 Graphics2D 未将文本显示为正确的字体
Java Library Graphics2D Doesn't Display Text as Correct Font
我正在尝试使用 Java 的 Graphics2D 库获取正确的字体来显示。我不确定当前显示的是什么字体。我试图将字体作为程序的一部分包含在内,以便没有该程序的人可以使用该程序。
Eclipse 没有声称找不到文件,但字体仍然不正确。
我要使用的字体
当前显示的内容
主类class
import java.io.File;
import java.io.IOException;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainClass extends JPanel{
static final int WINDOW_WIDTH = 1600;
static final int WINDOW_HEIGHT = 900;
// Displays the game window.
private static void displayGameWindow() {
JFrame frame = new JFrame("Bandit King");
frame.getContentPane().add(new MainClass());
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Imports a font.
private static void registerFont() {
try {
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
Font f = Font.createFont(Font.TRUETYPE_FONT, new File("OLDSH.TTF"));
ge.registerFont(f);
} catch (IOException|FontFormatException e) {
e.printStackTrace();
System.out.println("ERROR loading font, switching to serif.");
Font f = new Font("Serif", Font.PLAIN, 12);
}
}
// Calls functions to display the screen
@Override
public void paint(Graphics g) {
Dimension d = this.getPreferredSize();
Graphics2D g2d = (Graphics2D) g;
// default font settings
String fontName = "OldStyle 1 HPLS";
String fontType = "PLAIN";
int[] color = {0, 0, 0};
int fontSize = 25;
// display game title
String title = "Bandit King";
int titleCentered = DisplayText.findCenter(g2d, title);
DisplayText.displayText(g2d,
title, fontName, "BOLD",
color,
titleCentered, 50, 40);
// display menu
int yPos = 120;
String[] menuArr = {
"(a) Start a new game",
"(b) Load a saved game",
"(c) Exit the game",
"(d) Resume the game"};
for(int i = 0; i < menuArr.length; i++) {
DisplayText.displayText(g2d,
menuArr[i], fontName, fontType, color, 40, yPos, fontSize);
yPos += 60;
}
}
public static void main(String[] args) {
registerFont();
displayGameWindow();
}
}
DisplayText class
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
public class DisplayText {
/**
* Displays text to window
*
* PARAMETERS:
* g2d A Graphics2D object
* text The text to be drawn to screen
* fontName The name of the font to be used.
* fontType Whether the font is bold, italic, or neither.
* color Array of length 3, to represent RGB color
* xPos The x-position of the text.
* yPos The y-position of the text.
* fontSize The size of the font.
*/
public static void displayText(Graphics2D g2d,
String text, String fontName, String fontType,
int[] color,
int xPos, int yPos, int fontSize) {
// assign appropriate int according to fontType
fontType = fontType.toLowerCase();
int fontNum;
switch(fontType) {
case "bold" :
fontNum = Font.BOLD;
break;
case "italic" :
fontNum = Font.ITALIC;
break;
case "plain" :
fontNum = Font.PLAIN;
break;
default :
fontNum = Font.PLAIN;
break;
}
// determine the font and color, draw the string.
g2d.setFont(new Font(fontName, fontNum, fontSize));
g2d.setColor(new Color(color[0], color[1], color[2]));
g2d.drawString(text, xPos, yPos);
}
// Finds the x-position centered text should be at.
public static int findCenter(Graphics2D g2d, String text) {
int width = g2d.getFontMetrics().stringWidth(text);
return (MainClass.WINDOW_WIDTH / 2) - (width * 2);
}
}
我拼错了字体名称。在方法 registerFont 下,在 MainClass class 中,我输入了..
String fontName = "OldStyle 1 HPLS"
当我应该输入..
String fontName = "OldStyle 1 HPLHS"
注意额外的 "H".
我正在尝试使用 Java 的 Graphics2D 库获取正确的字体来显示。我不确定当前显示的是什么字体。我试图将字体作为程序的一部分包含在内,以便没有该程序的人可以使用该程序。 Eclipse 没有声称找不到文件,但字体仍然不正确。
我要使用的字体
当前显示的内容
主类class
import java.io.File;
import java.io.IOException;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainClass extends JPanel{
static final int WINDOW_WIDTH = 1600;
static final int WINDOW_HEIGHT = 900;
// Displays the game window.
private static void displayGameWindow() {
JFrame frame = new JFrame("Bandit King");
frame.getContentPane().add(new MainClass());
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Imports a font.
private static void registerFont() {
try {
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
Font f = Font.createFont(Font.TRUETYPE_FONT, new File("OLDSH.TTF"));
ge.registerFont(f);
} catch (IOException|FontFormatException e) {
e.printStackTrace();
System.out.println("ERROR loading font, switching to serif.");
Font f = new Font("Serif", Font.PLAIN, 12);
}
}
// Calls functions to display the screen
@Override
public void paint(Graphics g) {
Dimension d = this.getPreferredSize();
Graphics2D g2d = (Graphics2D) g;
// default font settings
String fontName = "OldStyle 1 HPLS";
String fontType = "PLAIN";
int[] color = {0, 0, 0};
int fontSize = 25;
// display game title
String title = "Bandit King";
int titleCentered = DisplayText.findCenter(g2d, title);
DisplayText.displayText(g2d,
title, fontName, "BOLD",
color,
titleCentered, 50, 40);
// display menu
int yPos = 120;
String[] menuArr = {
"(a) Start a new game",
"(b) Load a saved game",
"(c) Exit the game",
"(d) Resume the game"};
for(int i = 0; i < menuArr.length; i++) {
DisplayText.displayText(g2d,
menuArr[i], fontName, fontType, color, 40, yPos, fontSize);
yPos += 60;
}
}
public static void main(String[] args) {
registerFont();
displayGameWindow();
}
}
DisplayText class
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
public class DisplayText {
/**
* Displays text to window
*
* PARAMETERS:
* g2d A Graphics2D object
* text The text to be drawn to screen
* fontName The name of the font to be used.
* fontType Whether the font is bold, italic, or neither.
* color Array of length 3, to represent RGB color
* xPos The x-position of the text.
* yPos The y-position of the text.
* fontSize The size of the font.
*/
public static void displayText(Graphics2D g2d,
String text, String fontName, String fontType,
int[] color,
int xPos, int yPos, int fontSize) {
// assign appropriate int according to fontType
fontType = fontType.toLowerCase();
int fontNum;
switch(fontType) {
case "bold" :
fontNum = Font.BOLD;
break;
case "italic" :
fontNum = Font.ITALIC;
break;
case "plain" :
fontNum = Font.PLAIN;
break;
default :
fontNum = Font.PLAIN;
break;
}
// determine the font and color, draw the string.
g2d.setFont(new Font(fontName, fontNum, fontSize));
g2d.setColor(new Color(color[0], color[1], color[2]));
g2d.drawString(text, xPos, yPos);
}
// Finds the x-position centered text should be at.
public static int findCenter(Graphics2D g2d, String text) {
int width = g2d.getFontMetrics().stringWidth(text);
return (MainClass.WINDOW_WIDTH / 2) - (width * 2);
}
}
我拼错了字体名称。在方法 registerFont 下,在 MainClass class 中,我输入了..
String fontName = "OldStyle 1 HPLS"
当我应该输入..
String fontName = "OldStyle 1 HPLHS"
注意额外的 "H".