I'm trying to get the proper font to display using Java's Graphics2D library. I'm not sure what font is currently displayed. I am trying to include the font as part of the program so that the program can be used by people who don't have it. Eclipse doesn't claim it can't find the file, but the font still isn't right.
The font I want to use
MainClass 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);
}
}
I mispelled the font's name. Under the method registerFont, in the MainClass class, I typed..
String fontName = "OldStyle 1 HPLS"
when I should've typed..
String fontName = "OldStyle 1 HPLHS"
Notice the additional "H".