java - 如何在 Java 中居中 Graphics.drawString()?

标签 java text draw centering graphics2d

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

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

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

感谢任何帮助!

最佳答案

我在 this question 上使用了答案.

我使用的代码如下所示:

/**
 * 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 - 如何在 Java 中居中 Graphics.drawString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706197/

相关文章:

Debian 9 openjdk-7-jre 和 openjdk-7-jre-headless

java - 错误参数 : why is a List<List<>> not equivalent to a List<Object>?

python - 无意义的空间名词

R:将文本字符串转换为命令

c - 读取二进制文件C编程

java - 解密 Saml token 时出错

java - 如何从字符串数组创建词汇表

android - 如何删除 Android 中的画线

python - 在pygame中画一个圆到一个表面

c# - 如何使用 UWP 在图像上绘制文本并保存(适用于 Windows 10)