如何在Java中居中显示Graphics.drawString()?
我正在为我的Java游戏开发菜单系统,我想知道如何将Graphics.drawString()
的文本居中,这样如果我想绘制一个中心点位于X: 50
和Y: 50
的文本Y: 50
,文本宽30
像素,高10
像素,文本将从X: 35
和Y: 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 boundingRectangle
. * @param g - TheGraphics
instance. * @param r - The boundingRectangle
. * @param s - TheString
to center in the * bounding rectangle. * @param font - The display font of theString
* * @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); }