Java Graphics Draw Multiline String drawStringBiggest(final Graphics2D g2d, final Dimension dim, final String drawString)

Here you can find the source of drawStringBiggest(final Graphics2D g2d, final Dimension dim, final String drawString)

Description

Draw a given String to a graphic object as big as possible but still stay within given dimension.

License

Creative Commons License

Parameter

Parameter Description
g2d the graphics to draw to
dim the dimension to stay into
drawString the string to draw

Declaration

public static void drawStringBiggest(final Graphics2D g2d, final Dimension dim, final String drawString) 

Method Source Code


//package com.java2s;
/*/*from   w  ww  . ja  v a  2s  . c  om*/
 *  Copyright (C) 2010-2011 by Claas Anders "CaScAdE" Rathje
 *  admiralcascade@gmail.com
 *  Licensed under: Creative Commons / Non Commercial / Share Alike
 *  http://creativecommons.org/licenses/by-nc-sa/2.0/de/
 *
 */

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.Rectangle2D;

public class Main {
    /**
     * Draw a given String to a graphic object as big as possible but still stay within given dimension.
     *
     * For simple string width you might want so take a look at:
     * @see javax.swing.SwingUtilities#computeStringWidth(null, null);
     *
     * @param g2d the graphics to draw to
     * @param dim the dimension to stay into
     * @param drawString the string to draw
     */
    public static void drawStringBiggest(final Graphics2D g2d, final Dimension dim, final String drawString) {

        Rectangle2D bounds;

        //        System.out.println("drawBiggest");

        Object KEY_ANTIALIASING_before = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
        Object KEY_TEXT_ANTIALIASING_before = g2d.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING);

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

        int fontsize = (int) Math.max(6, Math.ceil(dim.getWidth() / drawString.length()) * 3);
        fontsize = Math.min(fontsize, (int) Math.ceil(dim.getHeight() * 1.3));

        //fontsize = 400;

        float posx = 0, posy = 0;
        //System.out.println("Starting fs: " + fontsize + " ws: " + getWidth() + " strlen: " + drawString.length());
        //long starttime = System.currentTimeMillis();
        do {
            fontsize -= 5;

            g2d.setFont(g2d.getFont().deriveFont(Font.PLAIN, fontsize));
            FontRenderContext frc = g2d.getFontRenderContext();
            TextLayout tl = new TextLayout(drawString, g2d.getFont(), frc);
            bounds = tl.getBounds();
            //bounds = tl.getPixelBounds(frc, 0, 0);
            posx = (float) (dim.getWidth() / 2 - bounds.getCenterX());
            posy = (float) (dim.getHeight() / 2 - bounds.getCenterY());

        } while ((bounds.getMaxX() + posx > dim.getWidth() || bounds.getMaxY() + posy > dim.getHeight()
                || bounds.getMinY() + posy < 0 || bounds.getMinX() + posx < 0) && fontsize > 5);

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, KEY_ANTIALIASING_before);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, KEY_TEXT_ANTIALIASING_before);

        g2d.drawString(drawString, (int) posx, (int) posy);
    }
}

Related

  1. drawMultilineString(Graphics g, String s, int alignment, Rectangle r, boolean print)
  2. drawMultilineText(final Graphics2D gc, final int x, int y, final String text)
  3. drawMultiLineText(String text, Graphics G, int x, int y)
  4. drawRightMultiLineText(String text, Graphics G, int x, int y)
  5. drawString(Graphics g, String s, int x, int y)
  6. drawStringUnderlineCharAt(Graphics g, String s, int underlinedIndex, int x, int y)
  7. drawStyleString(final Graphics graphics, final String message, final int x, final int y, final Color color, final Color color1)
  8. drawTrimmedString(Graphics g, String s, int x, int y, int width)
  9. paintMultilineText(Graphics2D g2d, String text, int textX, int textWidth, int textY, int maxTextLineCount)