字体 - 如何定位字符串的左上角?

时间:2015-04-19 05:57:56

标签: java swing fonts

假设我想使用java.awt.Graphics.drawString(String str, int x, int y)方法在某些特定坐标处绘制字符串,比如(300,300)。但是,drawString()方法始终将字符串的左下角定位在这些坐标处,而不是我想要的左上角。

在指定坐标处绘制字符串左上角的简单方法是什么?我知道java.awt.FontMetrics实用程序类,但很确定它是否有用。

2 个答案:

答案 0 :(得分:4)

FontMetrics是要使用的类:

public static int getStringAscent(Graphics page, Font f, String s) {
    // Find the size of string s in the font of the Graphics context "page"
    FontMetrics fm   = page.getFontMetrics(f);
    return fm.getAscent();
}

上升是给定字符串从基线上升的最大高度字形。基线的起点是drawString方法的参考点,因此上升是您必须调整坐标的距离。如果你使用它来使用Graphics2D g:

绘制一个String
g.drawString(msg, x, y);

你可以将它向下移动到字体f的上升高度:

Font small = new Font("Helvetica", Font.BOLD, 24);
FontMetrics metrics = getFontMetrics(small);
int d = metrics.getAscent();

g.drawString(msg, x, y + d );

答案 1 :(得分:3)

试试这个:

FontMetrics metric = g.getFontMetrics(g.getFont());
g.drawString(str, x, y + metric.getAscent() - metric.getDescent() - metric.getLeading());