Java - 居中文本(在 Canvas 上)

Java - Centering Text (on a Canvas)

感谢您查看我的问题。

我正在为我正在制作的游戏制作菜单,我想将游戏的标题放在主菜单的中央。我在 Stack Overflow 上查看了几个问题,但找不到答案。

问题

我遇到的问题是,每当我调用 centerString() 方法时,它都会将其置于 y-axis 的中心,而不是 x-axis 的中心。我在这里做错了什么?

代码

方法代码

private void centerString(String txt, int width, int height, Graphics g, Font font) {
        FontMetrics metrics = g.getFontMetrics();
        int x = (width - metrics.stringWidth(txt)) / 2;
        int y = (metrics.getAscent() + (height - (metrics.getAscent() + metrics.getDescent())) / 2);
        g.setFont(font);
        g.drawString(txt, x, y);
}

哪里叫

final Font fnt = new Font("Arial", Font.BOLD, 36);
centerString("ThatMarioEngine", toInt(screenSize.getWidth()), toInt(screenSize.getHeight()), g, fnt);

我已通过使用 windows 大小而不是屏幕大小解决了这个问题。通过将 g.setFont(font); 放在 之前解决了居中问题,我得到了 FontMetrics。