Java Glossary : FontMetrics

CMP home Java glossary home Menu no menu Last updated 2004-06-28 by Roedy Green ©1996-2004 Canadian Mind Products

Java definitions: 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

You are here : home : Java Glossary : F words : FontMetrics.

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 include a of lot of white space. getHeight even includes the suggested leading to the next line.

For more accurate, you need LineMetrics with takes a sample string of text and a FontRenderingContext. Even it so, it still include 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. If you are inside a paintComponent method, you can cast the Graphics object to a Graphics2D. Otherwise you must 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();


CMP logo
CMP_home
home
Canadian Mind Products CSS
HTML Checked!
ICRA ratings logo
mindprod.com IP:[24.87.56.253]
Your IP:[80.134.30.163]
You are visitor number 1071.
Please send errors, omissions and suggestions
to improve this page to Roedy Green.
You can get a fresh copy of this page from: or possibly from your local J: drive mirror:
http://mindprod.com/jgloss/fontmetrics.html J:\mindprod\jgloss\fontmetrics.html