FontMetrics : Java Glossary

go to home page F words local find full screen, hide local find menu Google search web for more information on this topic jump to foot of page translate this page with Babelfish by Roedy Green ©1996-2009 Canadian Mind Products
index page for letter ⇒ punctuation 0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z (all)
FontMetrics
To find out how many pixels some text will take on the screen you need FontMetrics.stringWidth(String). The trick is you cannot use the FontMetrics( Font f ) constructor to get your FontMetrics object. You must use the Component.getFontMetrics(Font f) or the Graphics.getFontMetrics( Font f ) method. Unfortunately, you can’t get the FontMetrics object from the Font class alone, and then cache it along with the Font.

For measuring height, FontMetrics is quite crude. FontMetrics. getAscent, getHeight and getDescent are only approximate, and includes a of lot of white space. getHeight even includes the suggested leading to the next line.

For more accuracy, you need LineMetrics with takes a sample string of text and a FontRenderingContext. Even it so, it still includes a lot of white space. I don’t know if there is a way to get totally tight bounding box around some text, without rolling your own pixel based methods. LineMetrics is awkward to use. To get a dummy Graphics for FontMetrics, you could try Component. getGraphics(). If you are inside a paintComponent method, you can cast the Graphics object to a Graphics2D. If there is no GUI, you could create a dummy Graphics2D context like this:

...
BufferedImage bufferedImage =
new BufferedImage ( 2 /* dummy */,
                    2 /* dummy */,
                    BufferedImage.TYPE_4BYTE_ABGR_PRE );
Graphics2D g2d = ( Graphics2D)( bufferedImage.createGraphics() );
FontRenderContext fr = g2d.getFontRenderContext();
LineMetrics lm = font.getLineMetrics( sampleText, fr );
float ascent = lm.getAscent();
float descent = lm.getDescent();
float height = lm.getHeight();

Learning More

Sun’s Javadoc on the FontMetrics class : available:
Graphics.getFontMetrics() gets you the FontMetrics of the current Font of the Graphics object.
Sun’s Javadoc on Graphics.getFontMetrics() : available:
Sun’s Javadoc on Component.getFontMetrics(Font font) : available:

CMP homejump to top
CMP logo
feedback Please email your feedback for publication, errors, omissions, broken/redirected link reports
and suggestions to improve this page to Roedy Green : feedback email
made with CSS
HTML Checked!
ICRA ratings logo
mindprod.com IP:[65.110.21.43]
Your face IP:[38.103.63.58]
You are visitor number 12,892.
You can get a fresh copy of this page from: or possibly from your local J: drive (Java virtual drive/mindprod.com website mirror)
http://mindprod.com/jgloss/fontmetrics.html J:\mindprod\jgloss\fontmetrics.html