使字符串居中于矩形

时间:2019-06-05 19:48:45

标签: java swing

我有一个要绘制的矩形坐标,我想在此矩形内居中放置一些文本。

int x, y, width, height;
String str = "This is a text";

x = 15;
y = 15;
width = 20;
heights = 30;

g.drawRect(x, y, width, height);
g.drawString(str, x + width/2, y + height/2);

2 个答案:

答案 0 :(得分:1)

如果要使文本居中,则需要知道文本的长度,以便知道其宽度相对于矩形的宽度。这是通过从Graphics对象获取FontMetrics实例来完成的。

因此基本代码为:

FontMetrics fm = g.getFontMetrics();
int stringWidth = fm.getStringWidth(...);
int xDiff = (width - stringWidth) / 2;
g.drawString(str, x + xDiff, ...);

当然,您还需要根据高度居中。

答案 1 :(得分:0)

医生说...

public abstract void drawString(String theString,
              int x,
              int y)
Renders the text of the specified iterator applying its attributes in accordance with the specification of the TextAttribute class.
The baseline of the leftmost character is at position (x, y) in this graphics context's coordinate system.

所以...您正在绘制的字符串是从矩形的中心点开始的,而不是字符串的中心点。

https://docs.oracle.com/javase/7/docs/api/java/awt/FontMetrics.html-从gc获取字体指标,并找出字符串的宽度。然后从开头x减去一半。对y做类似的事情(请记住,高度不是从底数开始的。)