View Javadoc

    1   /*
    2    * Util.java Created on June 5, 2004, 10:21 AM
    3    */
    4
    5   package baseCode.graphics.text;
    6
    7   import java.awt.Component;
    8   import java.awt.Font;
    9   import java.awt.FontMetrics;
    10  import java.awt.Graphics;
    11  import java.awt.Graphics2D;
    12  import java.awt.font.FontRenderContext;
    13  import java.awt.font.TextLayout;
    14  import java.awt.geom.AffineTransform;
    15
    16  /***
    17   * @author Will Braynen
    18   * @version $Id: Util.java,v 1.9 2004/07/27 03:18:58 pavlidis Exp $
    19   */
    20  public class Util {
    21
    22     /***
    23      * @param text the string whose pixel width is to be measured
    24      * @param font the pixels width of a string varies from font to font
    25      * @param c the parent component; usually <code>this</code>
    26      * @return the pixel width of the string for the specified font.
    27      */
    28     public static int stringPixelWidth( String text, Font font, Component c ) {
    29
    30        FontMetrics fontMetrics = c.getFontMetrics( font );
    31        return fontMetrics.charsWidth( text.toCharArray(), 0, text.length() );
    32
    33     } // end stringPixelWidth
    34
    35     /***
    36      * @param strings an array of strings whose pixels widths to compare
    37      * @param font the pixels width of a string varies from font to font
    38      * @param c the parent component; usually <code>this</code>
    39      * @return the largest pixel width of a string in the <code>strings</code> array.
    40      */
    41     public static int maxStringPixelWidth( String[] strings, Font font,
    42           Component c ) {
    43
    44        // the number of chars in the longest string
    45        int maxWidth = 0;
    46        int width;
    47        String s;
    48        for ( int i = 0; i < strings.length; i++ ) {
    49           s = strings[i];
    50           width = stringPixelWidth( s, font, c );
    51           if ( maxWidth < width ) {
    52              maxWidth = width;
    53           }
    54        }
    55
    56        return maxWidth;
    57     } // end getMaxPixelWidth
    58
    59     /***
    60      * Draws a string vertically, turned 90 degrees counter-clockwise. Read carefully what the <i>x </i> and <i>y </i>
    61      * coordinates means; chances are that if you draw to (x,y) = (0,0), you won't see anything.
    62      *
    63      * @param g the graphics context on which to draw
    64      * @param text the string to draw
    65      * @param font the font to use
    66      * @param x the <i>x </i> coordinate where you want to place the baseline of the text.
    67      * @param y the <i>y </i> coordinate where you want to place the first letter of the text.
    68      */
    69     public static void drawVerticalString( Graphics g, String text, Font font,
    70           int x, int y ) {
    71        Graphics2D g2 = ( Graphics2D ) g;
    72        AffineTransform fontAT = new AffineTransform();
    73        //fontAT.shear(0.2, 0.0); // slant text backwards
    74        fontAT.setToRotation( Math.PI * 3.0f / 2.0f ); // counter-clockwise 90
    75        // degrees
    76        FontRenderContext frc = g2.getFontRenderContext();
    77        Font theDerivedFont = font.deriveFont( fontAT );
    78        TextLayout tstring = new TextLayout( text, theDerivedFont, frc );
    79        tstring.draw( g2, x, y );
    80
    81     } // end drawVerticalString
    82  }