Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


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

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");
      return;
    }

    frame = new AWTStringSize(args[0]);

    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        Window window = e.getWindow();
        window.setVisible(false);
        window.dispose();
        System.exit(0);
      }
      });

    frame.setSize(400, 400);
    frame.setVisible(true);
  }
}
Daniel Savarese
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap