如何在 Java 中居中 Graphics.drawString()?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27706197/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I center Graphics.drawString() in Java?
提问by Daniel Kvist
I'm currently working on the menu system for my Javagame, 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
.
我目前正在为我的菜单系统上的Java游戏,我不知道如何可以从中心的文本Graphics.drawString()
,因此,如果我想画一个文本,其中心点是在X: 50
和Y: 50
,和文字30
像素宽,10
像素高,文本将从X: 35
和开始Y: 45
。
Can I determine the width of the text before I draw it?
Then it would be easy maths.
我可以在绘制之前确定文本的宽度吗?
那么数学就很简单了。
EDIT:I also wonder if I can get the height of the text, so that I can center it vertically too.
编辑:我也想知道是否可以获得文本的高度,以便我也可以将其垂直居中。
Any help is appreciated!
任何帮助表示赞赏!
采纳答案by Daniel Kvist
I used the answer on this question.
我在这个问题上使用了答案。
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);
}
回答by Gilbert Le Blanc
When I have to draw text, I usually need to center the text in a bounding rectangle.
当我必须绘制文本时,我通常需要将文本居中放置在一个边界矩形中。
/**
* This method centers a <code>String</code> in
* a bounding <code>Rectangle</code>.
* @param g - The <code>Graphics</code> instance.
* @param r - The bounding <code>Rectangle</code>.
* @param s - The <code>String</code> to center in the
* bounding rectangle.
* @param font - The display font of the <code>String</code>
*
* @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, r.x + a, r.y + b);
}