<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F2D_Graphics_GUI%2FFont</id>
		<title>Java/2D Graphics GUI/Font - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2F2D_Graphics_GUI%2FFont"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Font&amp;action=history"/>
		<updated>2026-04-18T19:33:30Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Font&amp;diff=9254&amp;oldid=prev</id>
		<title>Admin: Новая страница: «== A cache of the dynamically loaded fonts found in the fonts directory ==     &lt;source lang=&quot;java&quot;&gt;     /*  * @(#)DemoFonts.java 1.17 06/08/29  *   * Copyright (c) 2…»</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/2D_Graphics_GUI/Font&amp;diff=9254&amp;oldid=prev"/>
				<updated>2010-06-01T14:33:40Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «== A cache of the dynamically loaded fonts found in the fonts directory ==     &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;     /*  * @(#)DemoFonts.java 1.17 06/08/29  *   * Copyright (c) 2…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A cache of the dynamically loaded fonts found in the fonts directory ==&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;    &lt;br /&gt;
/*&lt;br /&gt;
 * @(#)DemoFonts.java 1.17 06/08/29&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 * &lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice, &lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may &lt;br /&gt;
 * be used to endorse or promote products derived from this software without &lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL &lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST &lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, &lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY &lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, &lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 * &lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
/*&lt;br /&gt;
 * @(#)DemoFonts.java 1.17 06/08/29&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
import java.util.concurrent.ConcurrentHashMap;&lt;br /&gt;
/**&lt;br /&gt;
 * A cache of the dynamically loaded fonts found in the fonts directory.&lt;br /&gt;
 */&lt;br /&gt;
public class DemoFonts {&lt;br /&gt;
  // Prepare a static &amp;quot;cache&amp;quot; mapping font names to Font objects.&lt;br /&gt;
  private static String[] names = { &amp;quot;A.ttf&amp;quot; };&lt;br /&gt;
  private static Map&amp;lt;String, Font&amp;gt; cache = new ConcurrentHashMap&amp;lt;String, Font&amp;gt;(names.length);&lt;br /&gt;
  static {&lt;br /&gt;
    for (String name : names) {&lt;br /&gt;
      cache.put(name, getFont(name));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static Font getFont(String name) {&lt;br /&gt;
    Font font = null;&lt;br /&gt;
    if (cache != null) {&lt;br /&gt;
      if ((font = cache.get(name)) != null) {&lt;br /&gt;
        return font;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    String fName = &amp;quot;/fonts/&amp;quot; + name;&lt;br /&gt;
    try {&lt;br /&gt;
      InputStream is = DemoFonts.class.getResourceAsStream(fName);&lt;br /&gt;
      font = Font.createFont(Font.TRUETYPE_FONT, is);&lt;br /&gt;
    } catch (Exception ex) {&lt;br /&gt;
      ex.printStackTrace();&lt;br /&gt;
      System.err.println(fName + &amp;quot; not loaded.  Using serif font.&amp;quot;);&lt;br /&gt;
      font = new Font(&amp;quot;serif&amp;quot;, Font.PLAIN, 24);&lt;br /&gt;
    }&lt;br /&gt;
    return font;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
          &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create font from true type font ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;  &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    File f = new File(&amp;quot;your.ttf&amp;quot;);&lt;br /&gt;
    FileInputStream in = new FileInputStream(f);&lt;br /&gt;
    Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, in);&lt;br /&gt;
    Font dynamicFont32Pt = dynamicFont.deriveFont(32f);&lt;br /&gt;
    JLabel testLabel = new JLabel(dynamicFont.getName());&lt;br /&gt;
    testLabel.setFont(dynamicFont32Pt);&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Font Loading Demo&amp;quot;);&lt;br /&gt;
    frame.getContentPane().add(testLabel);&lt;br /&gt;
    frame.pack();&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Display font in a grid ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;  &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    final int columnCount = 10;&lt;br /&gt;
    final int side = 25;&lt;br /&gt;
    final int[][] grid = new int[50][columnCount];&lt;br /&gt;
    JPanel panel = new JPanel() {&lt;br /&gt;
      public void paintComponent(Graphics g) {&lt;br /&gt;
        Font font = new Font(&amp;quot;WingDings&amp;quot;, Font.PLAIN, 14);&lt;br /&gt;
        g.setFont(font);&lt;br /&gt;
        int off = 0;&lt;br /&gt;
        for (int i = 0; i &amp;lt; 256 * 256; i++) {&lt;br /&gt;
          if (font.canDisplay((char) i) == false) {&lt;br /&gt;
            continue;&lt;br /&gt;
          }&lt;br /&gt;
          off++;&lt;br /&gt;
          grid[off / columnCount][off % columnCount] = i;&lt;br /&gt;
          int x = off % columnCount * side;&lt;br /&gt;
          int y = (off / columnCount) * side + side;&lt;br /&gt;
          g.drawString(Character.toString((char)i), x, y);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    panel.setSize(300, 300);&lt;br /&gt;
    frame.getContentPane().add(panel);&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Draw font inside a Rectangle ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;    &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.FontMetrics;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class StringRectPaintPanel extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    g.setFont(new Font(&amp;quot;&amp;quot;,0,100));&lt;br /&gt;
    FontMetrics fm = getFontMetrics(new Font(&amp;quot;&amp;quot;,0,100));&lt;br /&gt;
    String s = &amp;quot;jexp&amp;quot;;&lt;br /&gt;
    int x = 5;&lt;br /&gt;
    int y = 5;&lt;br /&gt;
    &lt;br /&gt;
    for (int i = 0; i &amp;lt; s.length(); i++) {&lt;br /&gt;
      char c = s.charAt(i);&lt;br /&gt;
      int h = fm.getHeight();&lt;br /&gt;
      int w = fm.charWidth(c);&lt;br /&gt;
      g.drawRect(x, y, w, h);&lt;br /&gt;
      g.drawString(String.valueOf(c), x, y + h);&lt;br /&gt;
      x = x + w;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setContentPane(new StringRectPaintPanel());&lt;br /&gt;
    frame.setSize(500, 300);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finds and displays available fonts ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.&lt;br /&gt;
 * All rights reserved. Software written by Ian F. Darwin and others.&lt;br /&gt;
 * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS&amp;quot;&amp;quot;&lt;br /&gt;
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED&lt;br /&gt;
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS&lt;br /&gt;
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;br /&gt;
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;br /&gt;
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;br /&gt;
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br /&gt;
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;br /&gt;
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 * &lt;br /&gt;
 * Java, the Duke mascot, and all variants of Sun&amp;quot;s Java &amp;quot;steaming coffee&lt;br /&gt;
 * cup&amp;quot; logo are trademarks of Sun Microsystems. Sun&amp;quot;s, and James Gosling&amp;quot;s,&lt;br /&gt;
 * pioneering role in inventing and promulgating (and standardizing) the Java &lt;br /&gt;
 * language and environment is gratefully acknowledged.&lt;br /&gt;
 * &lt;br /&gt;
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&amp;amp;T, for&lt;br /&gt;
 * inventing predecessor languages C and C++ is also gratefully acknowledged.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.Toolkit;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
/**&lt;br /&gt;
 * Finds and displays available fonts&lt;br /&gt;
 * &amp;lt;p&amp;gt;&lt;br /&gt;
 * TODO: should be a JTable with the text name in one column and the demo in a&lt;br /&gt;
 * JLabel in the other.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Ian Darwin (original)&lt;br /&gt;
 */&lt;br /&gt;
public class FontDemo extends JComponent {&lt;br /&gt;
  /** The list of Fonts */&lt;br /&gt;
  protected String[] fontNames;&lt;br /&gt;
  /** The fonts themselves */&lt;br /&gt;
  protected Font[] fonts;&lt;br /&gt;
  /** How much space between each name */&lt;br /&gt;
  static final int YINCR = 20;&lt;br /&gt;
  /**&lt;br /&gt;
   * Construct a FontDemo -- Sets title and gets array of fonts on the system&lt;br /&gt;
   */&lt;br /&gt;
  public FontDemo() {&lt;br /&gt;
    Toolkit toolkit = Toolkit.getDefaultToolkit();&lt;br /&gt;
    // For JDK 1.1: returns about 10 names (Serif, SansSerif, etc.)&lt;br /&gt;
    // fontNames = toolkit.getFontList();&lt;br /&gt;
    // For JDK 1.2: a much longer list; most of the names that come&lt;br /&gt;
    // with your OS (e.g., Arial, Lucida, Lucida Bright, Lucida Sans...)&lt;br /&gt;
    fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment()&lt;br /&gt;
        .getAvailableFontFamilyNames();&lt;br /&gt;
    fonts = new Font[fontNames.length];&lt;br /&gt;
  }&lt;br /&gt;
  public Dimension getPreferredSize() {&lt;br /&gt;
    return new Dimension(500, fontNames.length * YINCR);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Draws the font names in its font. Called by AWT when painting is needed&lt;br /&gt;
   * Does lazy evaluation of Font creation, caching the results (without this,&lt;br /&gt;
   * scrolling performance suffers even on a P3-750).&lt;br /&gt;
   */&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; fontNames.length; i += 1) {&lt;br /&gt;
      if (fonts[i] == null) {&lt;br /&gt;
        fonts[i] = new Font(fontNames[i], Font.BOLD, 14);&lt;br /&gt;
      }&lt;br /&gt;
      g.setFont(fonts[i]);&lt;br /&gt;
      int x = 20;&lt;br /&gt;
      int y = 20 + (YINCR * i);&lt;br /&gt;
      g.drawString(fontNames[i], x, y);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /** Simple main program to start it running */&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;Font Demo&amp;quot;);&lt;br /&gt;
    f.getContentPane().add(new JScrollPane(new FontDemo()));&lt;br /&gt;
    f.setSize(600, 700);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Font centered ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class HorizontallyCenteredText extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;
        RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2.setFont(new Font(&amp;quot;Serif&amp;quot;, Font.PLAIN, 48));&lt;br /&gt;
    paintHorizontallyCenteredText(g2, &amp;quot;Java Source&amp;quot;, 200, 75);&lt;br /&gt;
    paintHorizontallyCenteredText(g2, &amp;quot;and&amp;quot;, 200, 125);&lt;br /&gt;
    paintHorizontallyCenteredText(g2, &amp;quot;Support&amp;quot;, 200, 175);&lt;br /&gt;
  }&lt;br /&gt;
  protected void paintHorizontallyCenteredText(Graphics2D g2, String s,&lt;br /&gt;
      float centerX, float baselineY) {&lt;br /&gt;
    FontRenderContext frc = g2.getFontRenderContext();&lt;br /&gt;
    Rectangle2D bounds = g2.getFont().getStringBounds(s, frc);&lt;br /&gt;
    float width = (float) bounds.getWidth();&lt;br /&gt;
    g2.drawString(s, centerX - width / 2, baselineY);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.getContentPane().add(new HorizontallyCenteredText());&lt;br /&gt;
    f.setSize(450, 350);&lt;br /&gt;
    f.show();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FontDemo lists the system fonts and provides a sample of each one(Have some problems) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.&lt;br /&gt;
 * All rights reserved. Software written by Ian F. Darwin and others.&lt;br /&gt;
 * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 * 1. Redistributions of source code must retain the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 * 2. Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *    notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *    documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS&amp;quot;&amp;quot;&lt;br /&gt;
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED&lt;br /&gt;
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS&lt;br /&gt;
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR&lt;br /&gt;
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF&lt;br /&gt;
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS&lt;br /&gt;
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN&lt;br /&gt;
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)&lt;br /&gt;
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 * &lt;br /&gt;
 * Java, the Duke mascot, and all variants of Sun&amp;quot;s Java &amp;quot;steaming coffee&lt;br /&gt;
 * cup&amp;quot; logo are trademarks of Sun Microsystems. Sun&amp;quot;s, and James Gosling&amp;quot;s,&lt;br /&gt;
 * pioneering role in inventing and promulgating (and standardizing) the Java &lt;br /&gt;
 * language and environment is gratefully acknowledged.&lt;br /&gt;
 * &lt;br /&gt;
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&amp;amp;T, for&lt;br /&gt;
 * inventing predecessor languages C and C++ is also gratefully acknowledged.&lt;br /&gt;
 */&lt;br /&gt;
////&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.GraphicsEnvironment;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.Label;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
/** FontDemo lists the system fonts and provides a sample of each one */&lt;br /&gt;
public class FontDemoLabel extends JFrame {&lt;br /&gt;
  String fl[];&lt;br /&gt;
  JPanel p;&lt;br /&gt;
  public FontDemoLabel() {&lt;br /&gt;
    super(&amp;quot;Font Demo - Label&amp;quot;);&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    Container cp = getContentPane();&lt;br /&gt;
    // get font name list&lt;br /&gt;
    fl = GraphicsEnvironment.getLocalGraphicsEnvironment()&lt;br /&gt;
        .getAvailableFontFamilyNames();&lt;br /&gt;
    // IGNORE the setLayout and North/South stuff...&lt;br /&gt;
    // we will discuss it in a few pages!&lt;br /&gt;
    cp.setLayout(new BorderLayout());&lt;br /&gt;
    cp.add(BorderLayout.NORTH, new Label(&amp;quot;Number of Fonts = &amp;quot; + fl.length,&lt;br /&gt;
        Label.CENTER));&lt;br /&gt;
    cp.add(BorderLayout.CENTER, p = new JPanel());&lt;br /&gt;
    p.setLayout(new GridLayout(5, 0, 5, 5));&lt;br /&gt;
    for (int i = 0; i &amp;lt; fl.length; i++) {&lt;br /&gt;
      JLabel lab;&lt;br /&gt;
      // The crux of the matter: for each font name,&lt;br /&gt;
      // create a label using the name as the text,&lt;br /&gt;
      // AND set the font to be the named font!&lt;br /&gt;
      p.add(lab = new JLabel(fl[i]));&lt;br /&gt;
      lab.setFont(new Font(fl[i], Font.ITALIC | Font.BOLD, 14));&lt;br /&gt;
    }&lt;br /&gt;
    pack();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] av) {&lt;br /&gt;
    new FontDemoLabel().setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Font Derivation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.font.TextAttribute;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.util.Hashtable;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class FontDerivation extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;
        RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    // Create a 1-point font.&lt;br /&gt;
    Font font = new Font(&amp;quot;Serif&amp;quot;, Font.PLAIN, 1);&lt;br /&gt;
    float x = 20, y = 20;&lt;br /&gt;
    Font font24 = font.deriveFont(24.0f);&lt;br /&gt;
    g2.setFont(font24);&lt;br /&gt;
    g2.drawString(&amp;quot;font.deriveFont(24.0f)&amp;quot;, x, y += 30);&lt;br /&gt;
    Font font24italic = font24.deriveFont(Font.ITALIC);&lt;br /&gt;
    g2.setFont(font24italic);&lt;br /&gt;
    g2.drawString(&amp;quot;font24.deriveFont(Font.ITALIC)&amp;quot;, x, y += 30);&lt;br /&gt;
    AffineTransform at = new AffineTransform();&lt;br /&gt;
    at.shear(.2, 0);&lt;br /&gt;
    Font font24shear = font24.deriveFont(at);&lt;br /&gt;
    g2.setFont(font24shear);&lt;br /&gt;
    g2.drawString(&amp;quot;font24.deriveFont(at)&amp;quot;, x, y += 30);&lt;br /&gt;
    Hashtable attributes = new Hashtable();&lt;br /&gt;
    attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);&lt;br /&gt;
    Font font24bold = font24.deriveFont(attributes);&lt;br /&gt;
    g2.setFont(font24bold);&lt;br /&gt;
    g2.drawString(&amp;quot;font24.deriveFont(attributes)&amp;quot;, x, y += 30);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.getContentPane().add(new FontDerivation());&lt;br /&gt;
    f.setSize(350, 250);&lt;br /&gt;
    f.show();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Font List ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2000 David Flanagan.  All rights reserved.&lt;br /&gt;
 * This code is from the book Java Examples in a Nutshell, 2nd Edition.&lt;br /&gt;
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.&lt;br /&gt;
 * You may study, use, and modify it for any non-commercial purpose.&lt;br /&gt;
 * You may distribute it non-commercially as long as you retain this notice.&lt;br /&gt;
 * For a commercial use license, or to purchase the book (recommended),&lt;br /&gt;
 * visit http://www.davidflanagan.ru/javaexamples2.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
/**&lt;br /&gt;
 * An applet that displays the standard fonts and styles available in Java 1.1&lt;br /&gt;
 */&lt;br /&gt;
public class FontList extends JPanel {&lt;br /&gt;
  // The available font families&lt;br /&gt;
  String[] families = { &amp;quot;Serif&amp;quot;, // &amp;quot;TimesRoman&amp;quot; in Java 1.0&lt;br /&gt;
      &amp;quot;SansSerif&amp;quot;, // &amp;quot;Helvetica&amp;quot; in Java 1.0&lt;br /&gt;
      &amp;quot;Monospaced&amp;quot; }; // &amp;quot;Courier&amp;quot; in Java 1.0&lt;br /&gt;
  // The available font styles and names for each one&lt;br /&gt;
  int[] styles = { Font.PLAIN, Font.ITALIC, Font.BOLD,&lt;br /&gt;
      Font.ITALIC + Font.BOLD };&lt;br /&gt;
  String[] stylenames = { &amp;quot;Plain&amp;quot;, &amp;quot;Italic&amp;quot;, &amp;quot;Bold&amp;quot;, &amp;quot;Bold Italic&amp;quot; };&lt;br /&gt;
  // Draw the applet.&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    for (int f = 0; f &amp;lt; families.length; f++) { // for each family&lt;br /&gt;
      for (int s = 0; s &amp;lt; styles.length; s++) { // for each style&lt;br /&gt;
        Font font = new Font(families[f], styles[s], 18); // create font&lt;br /&gt;
        g.setFont(font); // set font&lt;br /&gt;
        String name = families[f] + &amp;quot; &amp;quot; + stylenames[s]; // create name&lt;br /&gt;
        g.drawString(name, 20, (f * 4 + s + 1) * 20); // display name&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] a) {&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    f.setContentPane(new FontList());&lt;br /&gt;
    f.setSize(300,300);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Font paint ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.GlyphVector;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class SimpleFont extends JPanel{&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
        Graphics2D g2 = (Graphics2D)g;&lt;br /&gt;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;
            RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
        &lt;br /&gt;
        String s = &amp;quot;Java Source and Support&amp;quot;;&lt;br /&gt;
        Font font = new Font(&amp;quot;Serif&amp;quot;, Font.PLAIN, 24);&lt;br /&gt;
        FontRenderContext frc = g2.getFontRenderContext();&lt;br /&gt;
        GlyphVector gv = font.createGlyphVector(frc, s);&lt;br /&gt;
        g2.drawGlyphVector(gv, 40, 60);&lt;br /&gt;
      }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.getContentPane().add(new SimpleFont());&lt;br /&gt;
    f.setSize(350, 250);&lt;br /&gt;
    f.show();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Load font from ttf file ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;    &lt;br /&gt;
/*&lt;br /&gt;
 * @(#)DemoFonts.java 1.17 06/08/29&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions are met:&lt;br /&gt;
 * &lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 * &lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice, &lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may &lt;br /&gt;
 * be used to endorse or promote products derived from this software without &lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 * &lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL &lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST &lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, &lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY &lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, &lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 * &lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
/*&lt;br /&gt;
 * @(#)DemoFonts.java 1.17 06/08/29&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.io.InputStream;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
import java.util.concurrent.ConcurrentHashMap;&lt;br /&gt;
/**&lt;br /&gt;
 * A cache of the dynamically loaded fonts found in the fonts directory.&lt;br /&gt;
 */&lt;br /&gt;
public class DemoFonts {&lt;br /&gt;
  // Prepare a static &amp;quot;cache&amp;quot; mapping font names to Font objects.&lt;br /&gt;
  private static String[] names = { &amp;quot;A.ttf&amp;quot; };&lt;br /&gt;
  private static Map&amp;lt;String, Font&amp;gt; cache = new ConcurrentHashMap&amp;lt;String, Font&amp;gt;(names.length);&lt;br /&gt;
  static {&lt;br /&gt;
    for (String name : names) {&lt;br /&gt;
      cache.put(name, getFont(name));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static Font getFont(String name) {&lt;br /&gt;
    Font font = null;&lt;br /&gt;
    if (cache != null) {&lt;br /&gt;
      if ((font = cache.get(name)) != null) {&lt;br /&gt;
        return font;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    String fName = &amp;quot;/fonts/&amp;quot; + name;&lt;br /&gt;
    try {&lt;br /&gt;
      InputStream is = DemoFonts.class.getResourceAsStream(fName);&lt;br /&gt;
      font = Font.createFont(Font.TRUETYPE_FONT, is);&lt;br /&gt;
    } catch (Exception ex) {&lt;br /&gt;
      ex.printStackTrace();&lt;br /&gt;
      System.err.println(fName + &amp;quot; not loaded.  Using serif font.&amp;quot;);&lt;br /&gt;
      font = new Font(&amp;quot;serif&amp;quot;, Font.PLAIN, 24);&lt;br /&gt;
    }&lt;br /&gt;
    return font;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
          &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Obtain FontMetrics of different fonts ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.FontMetrics;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class Main extends JFrame {&lt;br /&gt;
  public Main() {&lt;br /&gt;
    super(&amp;quot;Demonstrating FontMetrics&amp;quot;);&lt;br /&gt;
    setSize(510, 210);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    g.setFont(new Font(&amp;quot;SansSerif&amp;quot;, Font.BOLD, 12));&lt;br /&gt;
    FontMetrics fm = g.getFontMetrics();&lt;br /&gt;
    g.drawString(&amp;quot;Current font: &amp;quot; + g.getFont(), 10, 40);&lt;br /&gt;
    g.drawString(&amp;quot;Ascent: &amp;quot; + fm.getAscent(), 10, 55);&lt;br /&gt;
    g.drawString(&amp;quot;Descent: &amp;quot; + fm.getDescent(), 10, 70);&lt;br /&gt;
    g.drawString(&amp;quot;Height: &amp;quot; + fm.getHeight(), 10, 85);&lt;br /&gt;
    g.drawString(&amp;quot;Leading: &amp;quot; + fm.getLeading(), 10, 100);&lt;br /&gt;
    Font font = new Font(&amp;quot;Serif&amp;quot;, Font.ITALIC, 14);&lt;br /&gt;
    fm = g.getFontMetrics(font);&lt;br /&gt;
    g.setFont(font);&lt;br /&gt;
    g.drawString(&amp;quot;Current font: &amp;quot; + font, 10, 130);&lt;br /&gt;
    g.drawString(&amp;quot;Ascent: &amp;quot; + fm.getAscent(), 10, 145);&lt;br /&gt;
    g.drawString(&amp;quot;Descent: &amp;quot; + fm.getDescent(), 10, 160);&lt;br /&gt;
    g.drawString(&amp;quot;Height: &amp;quot; + fm.getHeight(), 10, 175);&lt;br /&gt;
    g.drawString(&amp;quot;Leading: &amp;quot; + fm.getLeading(), 10, 190);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Main app = new Main();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Outline Font paint ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class FontPaint extends JApplet {&lt;br /&gt;
  public void init() {&lt;br /&gt;
    FontPanel fontPanel = new FontPanel();&lt;br /&gt;
    getContentPane().add(fontPanel, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    FontPanel starPanel = new FontPanel();&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;Font&amp;quot;);&lt;br /&gt;
    f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    f.getContentPane().add(starPanel, BorderLayout.CENTER);&lt;br /&gt;
    f.setSize(new Dimension(550, 200));&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class FontPanel extends JPanel {&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    setBackground(Color.white);&lt;br /&gt;
    int width = getSize().width;&lt;br /&gt;
    int height = getSize().height;&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;
        RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_RENDERING,&lt;br /&gt;
        RenderingHints.VALUE_RENDER_QUALITY);&lt;br /&gt;
    FontRenderContext frc = g2.getFontRenderContext();&lt;br /&gt;
    Font f = new Font(&amp;quot;Helvetica&amp;quot;, 1, 60);&lt;br /&gt;
    String s = new String(&amp;quot;Java Source and Support.&amp;quot;);&lt;br /&gt;
    TextLayout textTl = new TextLayout(s, f, frc);&lt;br /&gt;
    AffineTransform transform = new AffineTransform();&lt;br /&gt;
    Shape outline = textTl.getOutline(null);&lt;br /&gt;
    Rectangle outlineBounds = outline.getBounds();&lt;br /&gt;
    transform = g2.getTransform();&lt;br /&gt;
    transform.translate(width / 2 - (outlineBounds.width / 2), height / 2&lt;br /&gt;
        + (outlineBounds.height / 2));&lt;br /&gt;
    g2.transform(transform);&lt;br /&gt;
    g2.setColor(Color.blue);&lt;br /&gt;
    g2.draw(outline);&lt;br /&gt;
    g2.setClip(outline);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wrap string according to FontMetrics ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
import java.awt.FontMetrics;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Collection;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
/**&lt;br /&gt;
 * Globally available utility classes, mostly for string manipulation.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Jim Menard, &lt;br /&gt;
 */&lt;br /&gt;
public class StringUtils {&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns an array of strings, one for each line in the string after it has&lt;br /&gt;
   * been wrapped to fit lines of &amp;lt;var&amp;gt;maxWidth&amp;lt;/var&amp;gt;. Lines end with any of&lt;br /&gt;
   * cr, lf, or cr lf. A line ending at the end of the string will not output a&lt;br /&gt;
   * further, empty string.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * This code assumes &amp;lt;var&amp;gt;str&amp;lt;/var&amp;gt; is not &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
   * &lt;br /&gt;
   * @param str&lt;br /&gt;
   *          the string to split&lt;br /&gt;
   * @param fm&lt;br /&gt;
   *          needed for string width calculations&lt;br /&gt;
   * @param maxWidth&lt;br /&gt;
   *          the max line width, in points&lt;br /&gt;
   * @return a non-empty list of strings&lt;br /&gt;
   */&lt;br /&gt;
  public static List wrap(String str, FontMetrics fm, int maxWidth) {&lt;br /&gt;
    List lines = splitIntoLines(str);&lt;br /&gt;
    if (lines.size() == 0)&lt;br /&gt;
      return lines;&lt;br /&gt;
    ArrayList strings = new ArrayList();&lt;br /&gt;
    for (Iterator iter = lines.iterator(); iter.hasNext();)&lt;br /&gt;
      wrapLineInto((String) iter.next(), strings, fm, maxWidth);&lt;br /&gt;
    return strings;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Given a line of text and font metrics information, wrap the line and add&lt;br /&gt;
   * the new line(s) to &amp;lt;var&amp;gt;list&amp;lt;/var&amp;gt;.&lt;br /&gt;
   * &lt;br /&gt;
   * @param line&lt;br /&gt;
   *          a line of text&lt;br /&gt;
   * @param list&lt;br /&gt;
   *          an output list of strings&lt;br /&gt;
   * @param fm&lt;br /&gt;
   *          font metrics&lt;br /&gt;
   * @param maxWidth&lt;br /&gt;
   *          maximum width of the line(s)&lt;br /&gt;
   */&lt;br /&gt;
  public static void wrapLineInto(String line, List list, FontMetrics fm, int maxWidth) {&lt;br /&gt;
    int len = line.length();&lt;br /&gt;
    int width;&lt;br /&gt;
    while (len &amp;gt; 0 &amp;amp;&amp;amp; (width = fm.stringWidth(line)) &amp;gt; maxWidth) {&lt;br /&gt;
      // Guess where to split the line. Look for the next space before&lt;br /&gt;
      // or after the guess.&lt;br /&gt;
      int guess = len * maxWidth / width;&lt;br /&gt;
      String before = line.substring(0, guess).trim();&lt;br /&gt;
      width = fm.stringWidth(before);&lt;br /&gt;
      int pos;&lt;br /&gt;
      if (width &amp;gt; maxWidth) // Too long&lt;br /&gt;
        pos = findBreakBefore(line, guess);&lt;br /&gt;
      else { // Too short or possibly just right&lt;br /&gt;
        pos = findBreakAfter(line, guess);&lt;br /&gt;
        if (pos != -1) { // Make sure this doesn&amp;quot;t make us too long&lt;br /&gt;
          before = line.substring(0, pos).trim();&lt;br /&gt;
          if (fm.stringWidth(before) &amp;gt; maxWidth)&lt;br /&gt;
            pos = findBreakBefore(line, guess);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      if (pos == -1)&lt;br /&gt;
        pos = guess; // Split in the middle of the word&lt;br /&gt;
      list.add(line.substring(0, pos).trim());&lt;br /&gt;
      line = line.substring(pos).trim();&lt;br /&gt;
      len = line.length();&lt;br /&gt;
    }&lt;br /&gt;
    if (len &amp;gt; 0)&lt;br /&gt;
      list.add(line);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the index of the first whitespace character or &amp;quot;-&amp;quot; in &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt;&lt;br /&gt;
   * that is at or before &amp;lt;var&amp;gt;start&amp;lt;/var&amp;gt;. Returns -1 if no such character is&lt;br /&gt;
   * found.&lt;br /&gt;
   * &lt;br /&gt;
   * @param line&lt;br /&gt;
   *          a string&lt;br /&gt;
   * @param start&lt;br /&gt;
   *          where to star looking&lt;br /&gt;
   */&lt;br /&gt;
  public static int findBreakBefore(String line, int start) {&lt;br /&gt;
    for (int i = start; i &amp;gt;= 0; --i) {&lt;br /&gt;
      char c = line.charAt(i);&lt;br /&gt;
      if (Character.isWhitespace(c) || c == &amp;quot;-&amp;quot;)&lt;br /&gt;
        return i;&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns the index of the first whitespace character or &amp;quot;-&amp;quot; in &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt;&lt;br /&gt;
   * that is at or after &amp;lt;var&amp;gt;start&amp;lt;/var&amp;gt;. Returns -1 if no such character is&lt;br /&gt;
   * found.&lt;br /&gt;
   * &lt;br /&gt;
   * @param line&lt;br /&gt;
   *          a string&lt;br /&gt;
   * @param start&lt;br /&gt;
   *          where to star looking&lt;br /&gt;
   */&lt;br /&gt;
  public static int findBreakAfter(String line, int start) {&lt;br /&gt;
    int len = line.length();&lt;br /&gt;
    for (int i = start; i &amp;lt; len; ++i) {&lt;br /&gt;
      char c = line.charAt(i);&lt;br /&gt;
      if (Character.isWhitespace(c) || c == &amp;quot;-&amp;quot;)&lt;br /&gt;
        return i;&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Returns an array of strings, one for each line in the string. Lines end&lt;br /&gt;
   * with any of cr, lf, or cr lf. A line ending at the end of the string will&lt;br /&gt;
   * not output a further, empty string.&lt;br /&gt;
   * &amp;lt;p&amp;gt;&lt;br /&gt;
   * This code assumes &amp;lt;var&amp;gt;str&amp;lt;/var&amp;gt; is not &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
   * &lt;br /&gt;
   * @param str&lt;br /&gt;
   *          the string to split&lt;br /&gt;
   * @return a non-empty list of strings&lt;br /&gt;
   */&lt;br /&gt;
  public static List splitIntoLines(String str) {&lt;br /&gt;
    ArrayList strings = new ArrayList();&lt;br /&gt;
    int len = str.length();&lt;br /&gt;
    if (len == 0) {&lt;br /&gt;
      strings.add(&amp;quot;&amp;quot;);&lt;br /&gt;
      return strings;&lt;br /&gt;
    }&lt;br /&gt;
    int lineStart = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; len; ++i) {&lt;br /&gt;
      char c = str.charAt(i);&lt;br /&gt;
      if (c == &amp;quot;\r&amp;quot;) {&lt;br /&gt;
        int newlineLength = 1;&lt;br /&gt;
        if ((i + 1) &amp;lt; len &amp;amp;&amp;amp; str.charAt(i + 1) == &amp;quot;\n&amp;quot;)&lt;br /&gt;
          newlineLength = 2;&lt;br /&gt;
        strings.add(str.substring(lineStart, i));&lt;br /&gt;
        lineStart = i + newlineLength;&lt;br /&gt;
        if (newlineLength == 2) // skip \n next time through loop&lt;br /&gt;
          ++i;&lt;br /&gt;
      } else if (c == &amp;quot;\n&amp;quot;) {&lt;br /&gt;
        strings.add(str.substring(lineStart, i));&lt;br /&gt;
        lineStart = i + 1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if (lineStart &amp;lt; len)&lt;br /&gt;
      strings.add(str.substring(lineStart));&lt;br /&gt;
    return strings;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>