Я пытаюсь получить правильный шрифт для отображения, используя библиотеку Java Graphics2D.Я не уверен, какой шрифт в настоящее время отображается.Я пытаюсь включить шрифт как часть программы, чтобы ее могли использовать люди, у которых ее нет.Eclipse не утверждает, что не может найти файл, но шрифт все еще не правильный.
Шрифт, который я хочу использовать
Шрифт OldStyle
Что отображается в данный момент
Класс MainClass
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
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);
}
}