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 accuracy, 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. 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();
![]() |
and suggestions to improve this page to Roedy Green : | ||
| Canadian Mind Products | |||
| mindprod.com IP:[65.110.21.43] | |||
| Your face IP:[38.103.63.62] | The information on this page is for non-military use only. | ||
| You are visitor number 11,568. | Military use includes use by defence contractors. | ||
| 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 | ||