Sunday, December 30, 2012

FontTest.java

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;

/**
* @version 1.33 2007-04-14
* @author Cay Horstmann
*/
public class FontTest
{

 public static String name="";

  public static void main(String[] args)
  {
 if(args.length>0)
name = args[0];
     EventQueue.invokeLater(new Runnable()
        {
           public void run()
           {
              FontFrame frame = new FontFrame();
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setVisible(true);
           }
        });
  }
}

/**
* A frame with a text message component
*/
class FontFrame extends JFrame
{
  public FontFrame()
  {
     setTitle("FontTest");
     setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

     // add component to frame

     FontComponent component = new FontComponent();
     add(component);
  }

  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 = FontTest.name;

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

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

     g2.setPaint(Color.LIGHT_GRAY);

     // 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());
     g2.draw(rect);
  }
}

No comments:

Post a Comment