Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Visual Basic
Expertise: Intermediate
Mar 6, 2000



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Font Metrics

Font properties that affect the rendering of strings are represented by the FontMetrics class. You can determine the FontMetrics of the current font in a graphics context with Graphics.getFontMetrics(). If all you want to know is the estimated width of a string in pixels, FontMetrics provides a stringWidth() method for just this purpose. However, a more general method is also provided, called getStringBounds(). This method will return a Rectangle2D instance representing the bounding box of a string when drawn in the given Font. The following program shows how to use this information to draw a rectangle around a string:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class AWTStringSize extends Frame {
  private String __string;

  public void paint(Graphics g) {
    FontMetrics metrics = g.getFontMetrics();
    Rectangle2D rect;
    int x, y;

    // Get dimensions of string
    rect = metrics.getStringBounds(__string, g);

    x = (getWidth() - (int)rect.getWidth())/2;
    y = (getHeight() - (int)rect.getHeight())/2;

    g.drawString(__string, x, y);

    // Draw a box slightly outside of the bounds of the string
    g.drawRect(x - 1, y - (int)rect.getHeight() - 1,
               (int)rect.getWidth() + 2,
               (int)rect.getHeight() + 2);

  public AWTStringSize(String string) {
    __string = string;

  public static final void main(String[] args) {
    AWTStringSize frame;

    if(args.length != 1) {
      System.err.println("Usage: AWTStringSize string");

    frame = new AWTStringSize(args[0]);

    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        Window window = e.getWindow();

    frame.setSize(400, 400);
Daniel Savarese
Thanks for your registration, follow us on our social networks to keep up-to-date