get Text Bounds - Java 2D Graphics

Java examples for 2D Graphics:Text

Description

get Text Bounds

Demo Code

/*******************************************************************************
 * This file is part of logisim-evolution.
 *
 *   logisim-evolution is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   logisim-evolution is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with logisim-evolution.  If not, see <http://www.gnu.org/licenses/>.
 *
 *   Original code by Carl Burch (http://www.cburch.com), 2011.
 *   Subsequent modifications by ://from   ww  w  . ja v a  2 s. c o  m
 *     + Haute ?cole Sp?cialis?e Bernoise
 *       http://www.bfh.ch
 *     + Haute ?cole du paysage, d'ing?nierie et d'architecture de Gen?ve
 *       http://hepia.hesge.ch/
 *     + Haute ?cole d'Ing?nierie et de Gestion du Canton de Vaud
 *       http://www.heig-vd.ch/
 *   The project is currently maintained by :
 *     + REDS Institute - HEIG-VD
 *       Yverdon-les-Bains, Switzerland
 *       http://reds.heig-vd.ch
 *******************************************************************************/
//package com.java2s;

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;

import java.awt.Rectangle;

public class Main {
    public static final int H_CENTER = 0;
    public static final int H_RIGHT = 1;
    public static final int V_TOP = -1;
    public static final int V_CENTER = 0;
    public static final int V_BASELINE = 1;
    public static final int V_BOTTOM = 2;
    public static final int V_CENTER_OVERALL = 3;

    static public Rectangle getTextBounds(Graphics g, Font font,
            String text, int x, int y, int halign, int valign) {
        if (g == null)
            return new Rectangle(x, y, 0, 0);
        Font oldfont = g.getFont();
        if (font != null)
            g.setFont(font);
        Rectangle ret = getTextBounds(g, text, x, y, halign, valign);
        if (font != null)
            g.setFont(oldfont);
        return ret;
    }

    static public Rectangle getTextBounds(Graphics g, String text, int x,
            int y, int halign, int valign) {
        if (g == null)
            return new Rectangle(x, y, 0, 0);
        FontMetrics mets = g.getFontMetrics();
        int width = mets.stringWidth(text);
        int ascent = mets.getAscent();
        int descent = mets.getDescent();
        int height = ascent + descent;

        Rectangle ret = new Rectangle(x, y, width, height);
        switch (halign) {
        case H_CENTER:
            ret.translate(-(width / 2), 0);
            break;
        case H_RIGHT:
            ret.translate(-width, 0);
            break;
        default:
            ;
        }
        switch (valign) {
        case V_TOP:
            break;
        case V_CENTER:
            ret.translate(0, -(ascent / 2));
            break;
        case V_CENTER_OVERALL:
            ret.translate(0, -(height / 2));
            break;
        case V_BASELINE:
            ret.translate(0, -ascent);
            break;
        case V_BOTTOM:
            ret.translate(0, -height);
            break;
        default:
            ;
        }
        return ret;
    }
}

Related Tutorials