如何在 Java 中居中 Graphics.drawString()? [英] How can I center Graphics.drawString() in Java?

查看:35
本文介绍了如何在 Java 中居中 Graphics.drawString()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在为我的 Java 游戏开发菜单系统,我想知道如何将 Graphics.drawString() 中的文本居中,以便如果我想画一个中心点在X: 50Y: 50 的文字,文字宽度为30 像素,10 像素高,文本将从 X: 35Y: 45 开始.

I'm currently working on the menu system for my Java game, and I wonder how I can center the text from Graphics.drawString(), so that if I want to draw a text whose center point is at X: 50 and Y: 50, and the text is 30 pixels wide and 10 pixels tall, the text will start at X: 35 and Y: 45.

我可以在绘制之前确定文本的宽度吗?
那么数学就很简单了.

Can I determine the width of the text before I draw it?
Then it would be easy maths.

我还想知道是否可以获取文本的高度,以便我也可以将其垂直居中.

I also wonder if I can get the height of the text, so that I can center it vertically too.

感谢任何帮助!

推荐答案

我使用了 这个问题.

我使用的代码如下所示:

The code I used looks something like this:

/**
 * 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);
}

这篇关于如何在 Java 中居中 Graphics.drawString()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆