我试图弄清楚如何使用Graphics2D和FontMetrics在窗口中水平居中放置文本。我做了一个方法,希望将它更改为Font类型后可以测量字符串的长度,但是并不能很好地使文本居中。
如何正确居中显示文字?
我的MainClass类:
setText()
我的DisplayText类:
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;
// display game title
String[] title = {"Bandit King"};
int titlePos = DisplayText.findHorizontalCenter(g2d, title[0], d.width);
DisplayText.displayText(g2d,
title, fontName, "BOLD",
color,
titlePos, 70, 60, 1);
g2d.drawRect(0, 0, d.width - 1, d.height - 1);
// display menu
String[] menuArr = {
"(a) Start a new game",
"(b) Load a saved game",
"(c) Exit the game",
"(d) Resume the game"};
DisplayText.displayText(g2d,
menuArr, fontName, fontType, color, 40, 210, fontSize, 2);
}
public static void main(String[] args) {
registerFont();
displayGameWindow();
}
}
答案 0 :(得分:2)
int x = MainClass.WINDOW_WIDTH / 2 - width;
应该是
int x = MainClass.WINDOW_WIDTH / 2 - width/2;
答案 1 :(得分:2)
尝试设置字体大小之前获取文本的宽度。