使用 Java 在窗口中水平居中文本

我试图弄清楚如何使用 Graphics2D 和 FontMetrics 在窗口中水平居中文本。我制作了一种方法,希望在将字符串更改为 Font 类型后可以测量字符串的长度,但它不能很好地使文本居中。

如何正确居中文本?

标题没有很好地居中:

http://img2.mukewang.com/6182460b0001158c15990697.jpg

我的 MainClass 类:


import java.io.File;

import java.io.IOException;

import java.awt.Font;

import java.awt.FontFormatException;

import java.awt.Color;

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() {

      Color tan = new Color(155, 136, 120);


      JFrame frame = new JFrame("Bandit King");

      frame.setBackground(tan);

      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;

      g.fillRect(0,  0,  d.width, d.height);


      // default font settings

      String fontName = "OldStyle 1 HPLHS";

      String fontType = "BOLD";

      int[] color = {0, 0, 0};

      int fontSize = 25;

}


米脂
浏览 412回答 2
2回答

一只萌萌小番薯

在获取文本宽度之前尝试设置字体大小。

慕的地6264312

int x = MainClass.WINDOW_WIDTH / 2 - width;应该int x = MainClass.WINDOW_WIDTH / 2 - width/2;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java