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。
感谢您查看我的问题。
我正在为我正在制作的游戏制作菜单,我想将游戏的标题放在主菜单的中央。我在 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。