如何计算字体的宽度?

2022-09-04 23:59:55

我正在使用java来绘制一些文本,但是我很难计算字符串的宽度。例如:郑中国...此字符串将占用多长时间?


答案 1

对于单个字符串,可以获取给定绘图字体的度量,并使用它来计算字符串大小。例如:

String      message = new String("Hello, StackOverflow!");
Font        defaultFont = new Font("Helvetica", Font.PLAIN, 12);
FontMetrics fontMetrics = new FontMetrics(defaultFont);
//...
int width = fontMetrics.stringWidth(message);

如果您有更复杂的文本布局要求,例如在给定宽度内排列一段文本,则可以创建一个 java.awt.font.TextLayout 对象,如以下示例(来自 docs):

Graphics2D g = ...;
Point2D loc = ...;
Font font = Font.getFont("Helvetica-bold-italic");
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout("This is a string", font, frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());

Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
              bounds.getY()+loc.getY(),
              bounds.getWidth(),
              bounds.getHeight());
g.draw(bounds);