Библиотека Java Graphics2D не отображает текст как правильный шрифт - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь получить правильный шрифт для отображения, используя библиотеку Java Graphics2D.Я не уверен, какой шрифт в настоящее время отображается.Я пытаюсь включить шрифт как часть программы, чтобы ее могли использовать люди, у которых ее нет.Eclipse не утверждает, что не может найти файл, но шрифт все еще не правильный.

Шрифт, который я хочу использовать

Шрифт OldStyle

Что отображается в данный момент enter image description here

Класс 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);
   }

}

1 Ответ

0 голосов
/ 07 октября 2018

Я неправильно ввел название шрифта.Под методом registerFont в классе MainClass я набрал ..

String fontName = "OldStyle 1 HPLS" 

, когда должен был набрать ..

String fontName = "OldStyle 1 HPLHS"

Обратите внимание на дополнительную букву "H".

...