Center text based on font metrics : Draw Text « 2D Graphics « Java Tutorial

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JPanel;
public class Center extends JPanel {
    static String text[] = new String[]{"asdf","asdfasdf"};
    private Dimension dim;
    public void addNotify() {
        int maxWidth = 0;
        FontMetrics fm = getFontMetrics(getFont());
        for (int i=0;i<text.length;i++) {
            maxWidth = Math.max (maxWidth, fm.stringWidth(text[i]));
        Insets inset = getInsets();
        dim = new Dimension (maxWidth + inset.left + inset.right,
            text.length*fm.getHeight() + + inset.bottom);
        setSize (dim);
    public void paint (Graphics g) {
        g.translate(100, 100);
        FontMetrics fm = g.getFontMetrics();
        for (int i=0;i<text.length;i++) {
            int x,y;
            x = (getWidth() - fm.stringWidth(text[i]))/2;
            y = (i+1)*fm.getHeight()-1;
            g.drawString (text[i], x, y);
    public static void main(String[] a){
      JFrame f = new JFrame();
      f.add(new Center());

16.20.Draw Text
16.20.1.How do I...Draw text?How do I...Draw text?
16.20.2.Getting the Dimensions of Text
16.20.3.draw Bytes
16.20.4.Draw CharsDraw Chars
16.20.5.Draw unicode with Graphics2D
16.20.6.use Text Attributes to style text
16.20.7.Drawing Simple Text
16.20.8.Drawing Rotated Text
16.20.9.Draw string rotated clockwise 45 degrees
16.20.10.Draw string rotated counter-clockwise 45 degrees
16.20.11.TextAttribute.FONT: Set font for AttributedString
16.20.12.TextAttribute.FOREGROUND: Set color for AttributedString
16.20.13.TextAttribute.UNDERLINE: Set underline for AttributedString
16.20.14.TextAttribute.BACKGROUND: Set background for AttributedString
16.20.15.TextAttribute.STRIKETHROUGH: Set STRIKETHROUGH for AttributedString
16.20.16.TextAttribute.SIZE: Set SIZE for AttributedString
16.20.17.TextAttribute.SUPERSCRIPT: Set SUPERSCRIPT for AttributedString
16.20.18.Center text based on font metrics
16.20.19.Create a shadowed text
16.20.20.Display underlined text
16.20.21.Display vertical text
16.20.22.Use AffineTransform to draw vertical text
16.20.23.Display unicode text
16.20.24.Display some lyrics on the panel.
16.20.25.Paint a calendar
16.20.26.Generate Shape From Text