Draw base line and enclosing line for a font : Font « 2D Graphics GUI « Java

Draw base line and enclosing line for a font

   This program is a part of the companion code for Core Java 8th ed.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JComponent;
import javax.swing.JFrame;

 * @version 1.33 2007-04-14
 * @author Cay Horstmann
public class FontTest
   public static void main(String[] args)
      EventQueue.invokeLater(new Runnable()
            public void run()
               FontFrame frame = new FontFrame();

 * A frame with a text message component
class FontFrame extends JFrame
   public FontFrame()

      // add component to frame

      FontComponent component = new FontComponent();

   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 200;

 * A component that shows a centered message in a box.
class FontComponent extends JComponent
   public void paintComponent(Graphics g)
      Graphics2D g2 = (Graphics2D) g;

      String message = "Hello, World!";

      Font f = new Font("Serif", Font.BOLD, 36);

      // measure the size of the message

      FontRenderContext context = g2.getFontRenderContext();
      Rectangle2D bounds = f.getStringBounds(message, context);

      // set (x,y) = top left corner of text

      double x = (getWidth() - bounds.getWidth()) / 2;
      double y = (getHeight() - bounds.getHeight()) / 2;

      // add ascent to y to reach the baseline

      double ascent = -bounds.getY();
      double baseY = y + ascent;

      // draw the message

      g2.drawString(message, (int) x, (int) baseY);


      // draw the baseline

      g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));

      // draw the enclosing rectangle

      Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());


Related examples in the same category

1.Ascii font pattern
2.A cache of the dynamically loaded fonts found in the fonts directory
3.Load font from ttf file
4.Outline Font paintOutline Font paint
5.Font paintFont paint
6.Font DerivationFont Derivation
7.Font centeredFont centered
8.Font ListFont List
9.FontDemo lists the system fonts and provides a sample of each one(Have some problems)
10.Finds and displays available fonts
11.Obtain FontMetrics of different fonts
12.Draw font inside a Rectangle
13.Display font in a grid
14.Create font from true type font
15.Wrap string according to FontMetrics
16.List all Fonts