Java Library Graphics2D不会将文本显示为正确的字体

时间:2018-10-07 18:55:21

标签: java eclipse swing graphics graphics2d

我正在尝试使用Java的Graphics2D库获取正确的字体来显示。我不确定当前显示什么字体。我试图将字体作为程序的一部分,以便没有该程序的人可以使用该程序。 Eclipse并不声称找不到文件,但是字体仍然不正确。

我要使用的字体

OldStyle Font

当前显示的内容 enter image description here

MainClass类

    final DatabaseReference databaseRef =FirebaseDatabase.getInstance().getReference().
                    child(selected_server).child(user_role).child(user.getUid();
                                databaseRef.updateChildren(newProfile)
                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {

                                            }
                                        });

DisplayText类

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();
   }
}

1 个答案:

答案 0 :(得分:0)

我拼错了字体的名称。在MainClass类的registerFont方法下,键入。.

int size = sizeof(struct DNS_Header);
    size += sizeof(struct DNS_Question);
    char *message [size];
    int totalSize = 0;
    int stringSize = qname_labelFormat.length() + 1;
    char* temp = {0};
    temp = (char*)qname_labelFormat.c_str();

    std::memcpy(message, (struct DNS_Header*)&packetHeader, sizeof(packetHeader));
    totalSize = sizeof(struct DNS_Header);

    std::memcpy(message + totalSize, (char*)temp, sizeof(qname_labelFormat));
    totalSize += sizeof(qname_labelFormat);

    std::memcpy(message + totalSize, (struct DNS_Question*)&packetQuestion, sizeof(packetQuestion));
    totalSize += sizeof(packetQuestion);

    int bytesSent = 0;
    if ((bytesSent = write(sock, message, totalSize)) < 0) {
        logger->printLog ("write Failed");
        std::string error = strerror(errno);
        logger->printLog(error);
    }
    else {
        logger->printLog ("write was successful");
}

当我应该输入..

String fontName = "OldStyle 1 HPLS" 

注意附加的“ H”。