如何在Java中居中显示Graphics.drawString()?

我正在为我的Java游戏开发菜单系统,我想知道如何将Graphics.drawString()的文本居中,这样如果我想绘制一个中心点位于X: 50Y: 50的文本Y: 50 ,文本宽30像素,高10像素,文本将从X: 35Y: 45

我可以在绘制之前确定文本的宽度吗?
然后这将很容易数学。

编辑:我也想知道我是否可以获得文本的高度,以便我也可以垂直居中。

任何帮助表示赞赏!

我在这个问题上使用了答案。

我使用的代码看起来像这样:

 /** * Draw a String centered in the middle of a Rectangle. * * @param g The Graphics instance. * @param text The String to draw. * @param rect The Rectangle to center the text in. */ public void drawCenteredString(Graphics g, String text, Rectangle rect, Font font) { // Get the FontMetrics FontMetrics metrics = g.getFontMetrics(font); // Determine the X coordinate for the text int x = rect.x + (rect.width - metrics.stringWidth(text)) / 2; // Determine the Y coordinate for the text (note we add the ascent, as in java 2d 0 is top of the screen) int y = rect.y + ((rect.height - metrics.getHeight()) / 2) + metrics.getAscent(); // Set the font g.setFont(font); // Draw the String g.drawString(text, x, y); } 

当我必须绘制文本时,我通常需要将文本居中在一个边界矩形中。

 /** * This method centers a String in * a bounding Rectangle. * @param g - The Graphics instance. * @param r - The bounding Rectangle. * @param s - The String to center in the * bounding rectangle. * @param font - The display font of the String * * @see java.awt.Graphics * @see java.awt.Rectangle * @see java.lang.String */ public void centerString(Graphics g, Rectangle r, String s, Font font) { FontRenderContext frc = new FontRenderContext(null, true, true); Rectangle2D r2D = font.getStringBounds(s, frc); int rWidth = (int) Math.round(r2D.getWidth()); int rHeight = (int) Math.round(r2D.getHeight()); int rX = (int) Math.round(r2D.getX()); int rY = (int) Math.round(r2D.getY()); int a = (r.width / 2) - (rWidth / 2) - rX; int b = (r.height / 2) - (rHeight / 2) - rY; g.setFont(font); g.drawString(s, rx + a, ry + b); }