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