Java Code Examples for java.awt.Font#getStringBounds()

The following examples show how to use java.awt.Font#getStringBounds() . These examples are extracted from open source projects. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 2
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 3
private boolean okGDIMetrics(String str, Font font,
                             FontRenderContext frc, double scaleX) {

    Rectangle2D bds = font.getStringBounds(str, frc);
    double jdkAdvance = bds.getWidth();
    jdkAdvance = Math.round(jdkAdvance*scaleX);
    int gdiAdvance = ((WPrinterJob)getPrinterJob()).getGDIAdvance(str);
    if (jdkAdvance > 0 && gdiAdvance > 0) {
        double diff = Math.abs(gdiAdvance-jdkAdvance);
        double ratio = gdiAdvance/jdkAdvance;
        if (ratio < 1) {
            ratio = 1/ratio;
        }
        return diff <= 1 || ratio < 1.01;
    }
    return true;
}
 
Example 4
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 5
private boolean okGDIMetrics(String str, Font font,
                             FontRenderContext frc, double scaleX) {

    Rectangle2D bds = font.getStringBounds(str, frc);
    double jdkAdvance = bds.getWidth();
    jdkAdvance = Math.round(jdkAdvance*scaleX);
    int gdiAdvance = ((WPrinterJob)getPrinterJob()).getGDIAdvance(str);
    if (jdkAdvance > 0 && gdiAdvance > 0) {
        double diff = Math.abs(gdiAdvance-jdkAdvance);
        double ratio = gdiAdvance/jdkAdvance;
        if (ratio < 1) {
            ratio = 1/ratio;
        }
        return diff <= 1 || ratio < 1.002;
    }
    return true;
}
 
Example 6
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 7
private boolean okGDIMetrics(String str, Font font,
                             FontRenderContext frc, double scaleX) {

    Rectangle2D bds = font.getStringBounds(str, frc);
    double jdkAdvance = bds.getWidth();
    jdkAdvance = Math.round(jdkAdvance*scaleX);
    int gdiAdvance = ((WPrinterJob)getPrinterJob()).getGDIAdvance(str);
    if (jdkAdvance > 0 && gdiAdvance > 0) {
        double diff = Math.abs(gdiAdvance-jdkAdvance);
        double ratio = gdiAdvance/jdkAdvance;
        if (ratio < 1) {
            ratio = 1/ratio;
        }
        return diff <= 1 || ratio < 1.002;
    }
    return true;
}
 
Example 8
Source Project: gsn   File: SVGUtils.java    License: GNU General Public License v3.0 6 votes vote down vote up
public static Width_Height_Decendent_ValueBean getBoundsOfAString ( String s , Font f ) {
   int width = 0;
   s = s.replace( "\t" , "   " );
   StringTokenizer stringTokenizer = new StringTokenizer( s , "\n" , false );
   FontRenderContext context = new FontRenderContext( null , false , false );
   String [ ] tokens = new String [ stringTokenizer.countTokens( ) ];
   int [ ] heights = new int [ stringTokenizer.countTokens( ) ];
   int [ ] decendents = new int [ stringTokenizer.countTokens( ) ];
   int i = 0;
   while ( stringTokenizer.hasMoreElements( ) ) {
      String nextLine = stringTokenizer.nextToken( ).trim( );
      // TextLayout textLayout = new TextLayout ( nextLine, f, context
      // );
      Rectangle2D temp = f.getStringBounds( nextLine , context );
      // Rectangle2D temp = f.createGlyphVector ( context, nextLine
      // ).getLogicalBounds ();
      decendents[ i ] = ( int ) f.getLineMetrics( s , context ).getDescent( );
      width = Math.max( width , ( int ) temp.getWidth( ) );
      heights[ i ] = ( int ) temp.getHeight( );
      tokens[ i++ ] = nextLine;
      
   }
   return new Width_Height_Decendent_ValueBean( tokens , width , heights , decendents );
}
 
Example 9
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 10
/**
 * Finds the font that fits into the progress arc. Stores the associated height and width.
 */
private static void initializeFontMeasures() {
	platformSpecificFont = DEFAULT_FONT;
	Graphics2D testGraphics = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB).createGraphics();
	float[] possibleFontSizes = { 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10 };

	for (float size : possibleFontSizes) {
		Font deriveFont = DEFAULT_FONT.deriveFont(size);
		testGraphics.setFont(deriveFont);
		String testString = "54";
		Rectangle2D stringBounds = deriveFont.getStringBounds(testString, testGraphics.getFontRenderContext());

		if (stringBounds.getWidth() <= MAXIMAL_TEXT_WIDTH) {
			platformSpecificFont = deriveFont;
			textWidth = stringBounds.getWidth();
			textHeight = deriveFont.createGlyphVector(testGraphics.getFontRenderContext(), testString).getVisualBounds()
					.getHeight();
			break;
		}

	}
}
 
Example 11
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 12
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 13
static void test(int sz) {
     Font reg = new Font(name, Font.PLAIN, sz);
     Font bold = new Font(name, Font.BOLD, sz);
     //System.out.println("reg="+reg);
     //System.out.println("bold="+bold);
     FontRenderContext frc = new FontRenderContext(null, false, false);
     if (reg.getFontName(Locale.ENGLISH).equals(name) &&
         bold.getFontName(Locale.ENGLISH).equals(name)) {
         Rectangle2D rb = reg.getStringBounds(" ", frc);
         Rectangle2D bb = bold.getStringBounds(" ", frc);
         if (bb.getWidth() > rb.getWidth() + 1.01f) {
             System.err.println("reg="+reg+" bds = " + rb);
             System.err.println("bold="+bold+" bds = " + bb);
             throw new RuntimeException("Advance difference too great.");
         }
     } else {
         System.out.println("Skipping test because fonts aren't as expected");
     }
}
 
Example 14
Source Project: JavaWeb   File: AllOpenController.java    License: Apache License 2.0 5 votes vote down vote up
private String drawImg(ByteArrayOutputStream output){
	//final int verifyCodeLength = 10;
	final int verifyCodeLength = 4;
	String code = getVerifyCode(verifyCodeLength);
	//int width = 125;
	int width = 70;
	int height = 25;
	BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
	Font font = new Font("Times New Roman",Font.PLAIN,20);
	Graphics2D g = bi.createGraphics();
	g.setFont(font);
	g.setColor(new Color(66,2,82));
	g.setBackground(new Color(226,226,240));
	g.clearRect(0, 0, width, height);
	FontRenderContext context = g.getFontRenderContext();
	Rectangle2D bounds = font.getStringBounds(code, context);
	double x = (width - bounds.getWidth()) / 2;
	double y = (height - bounds.getHeight()) / 2;
	double ascent = bounds.getY();
	double baseY = y - ascent;
	g.drawString(code, (int)x, (int)baseY);
	g.dispose();
	try {
		ImageIO.write(bi, "jpg", output);
	} catch (IOException e) {
		//do nothing
	}
	return code;
}
 
Example 15
public MemoryStatus() {
//        Font font = new JLabel().getFont();
        Font font = UIManager.getFont("Label.font");
        MemoryStatus.this.setFont(font);

        FontRenderContext fontRendererContext = new FontRenderContext(null, false, false);
        Rectangle2D bounds = font.getStringBounds(MEMORY_TEST_STRING, fontRendererContext);
        Dimension dimension = new Dimension((int) bounds.getWidth(), (int) bounds.getHeight());
        setPreferredSize(dimension);
        setMaximumSize(dimension);
        lineMetrics = font.getLineMetrics(MEMORY_TEST_STRING, fontRendererContext);        
        addMouseListener(new MouseHandler());
    }
 
Example 16
private static void runTest() {
    im = new BufferedImage(W, H, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = im.createGraphics();
    g2d.setColor(Color.white);
    g2d.fillRect(0, 0, W, H);
    g2d.setColor(Color.black);
    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                         RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    char[] chs = "Sample Text.".toCharArray();
    int len = chs.length;

    int x = 50, y = 100;

    FontRenderContext frc = g2d.getFontRenderContext();
    Font plain = new Font("Serif", Font.PLAIN, 48);
    GlyphVector pgv = plain.layoutGlyphVector(frc, chs, 0, len, 0);
    g2d.setFont(plain);
    g2d.drawChars(chs, 0, len, x, y); y +=50;

    g2d.drawGlyphVector(pgv, x, y); y += 50;
    Rectangle2D plainStrBounds = plain.getStringBounds(chs, 0, len, frc);
    Rectangle2D plainGVBounds = pgv.getLogicalBounds();
    Font bold = new Font("Serif", Font.BOLD, 48);
    GlyphVector bgv = bold.layoutGlyphVector(frc, chs, 0, len, 0);
    Rectangle2D boldStrBounds = bold.getStringBounds(chs, 0, len, frc);
    Rectangle2D boldGVBounds = bgv.getLogicalBounds();
    g2d.setFont(bold);
    g2d.drawChars(chs, 0, len, x, y); y +=50;
    g2d.drawGlyphVector(bgv, x, y);
    System.out.println("Plain String Bounds = " + plainStrBounds);
    System.out.println("Bold String Bounds = " + boldStrBounds);
    System.out.println("Plain GlyphVector Bounds = " + plainGVBounds);
    System.out.println("Bold GlyphVector Bounds = " + boldGVBounds);
    if (!plainStrBounds.equals(boldStrBounds) &&
         plainGVBounds.equals(boldGVBounds))
    {
        System.out.println("Test failed: Plain GV bounds same as Bold");
        if (!interactive) {
            throw new RuntimeException("Plain GV bounds same as Bold");
        }
    }

}
 
Example 17
Source Project: gama   File: FontCache.java    License: GNU General Public License v3.0 4 votes vote down vote up
@Override
public Rectangle2D getBounds(final CharSequence str, final Font font, final FontRenderContext frc) {
	return font.getStringBounds(str.toString(), frc);
}
 
Example 18
@Override
public Rectangle2D getStringBounds(String text, FontStyleInfo fontStyle) {
	Font font = getFont(fontStyle);
	return font.getStringBounds(text, 0, text.length(), new FontRenderContext(new AffineTransform(), true, true));
}
 
Example 19
private static void runTest() {
    im = new BufferedImage(W, H, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = im.createGraphics();
    g2d.setColor(Color.white);
    g2d.fillRect(0, 0, W, H);
    g2d.setColor(Color.black);
    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                         RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    char[] chs = "Sample Text.".toCharArray();
    int len = chs.length;

    int x = 50, y = 100;

    FontRenderContext frc = g2d.getFontRenderContext();
    Font plain = new Font("Serif", Font.PLAIN, 48);
    GlyphVector pgv = plain.layoutGlyphVector(frc, chs, 0, len, 0);
    g2d.setFont(plain);
    g2d.drawChars(chs, 0, len, x, y); y +=50;

    g2d.drawGlyphVector(pgv, x, y); y += 50;
    Rectangle2D plainStrBounds = plain.getStringBounds(chs, 0, len, frc);
    Rectangle2D plainGVBounds = pgv.getLogicalBounds();
    Font bold = new Font("Serif", Font.BOLD, 48);
    GlyphVector bgv = bold.layoutGlyphVector(frc, chs, 0, len, 0);
    Rectangle2D boldStrBounds = bold.getStringBounds(chs, 0, len, frc);
    Rectangle2D boldGVBounds = bgv.getLogicalBounds();
    g2d.setFont(bold);
    g2d.drawChars(chs, 0, len, x, y); y +=50;
    g2d.drawGlyphVector(bgv, x, y);
    System.out.println("Plain String Bounds = " + plainStrBounds);
    System.out.println("Bold String Bounds = " + boldStrBounds);
    System.out.println("Plain GlyphVector Bounds = " + plainGVBounds);
    System.out.println("Bold GlyphVector Bounds = " + boldGVBounds);
    if (!plainStrBounds.equals(boldStrBounds) &&
         plainGVBounds.equals(boldGVBounds))
    {
        System.out.println("Test failed: Plain GV bounds same as Bold");
        if (!interactive) {
            throw new RuntimeException("Plain GV bounds same as Bold");
        }
    }

}
 
Example 20
Source Project: gama   File: FontCache.java    License: GNU General Public License v3.0 4 votes vote down vote up
@Override
public Rectangle2D getBounds(final String str, final Font font, final FontRenderContext frc) {
	return font.getStringBounds(str, frc);
}