如何将字符串(使用g.drawString)居中到屏幕中间

时间:2015-07-21 22:23:57

标签: java jframe drawstring

我试图在我尝试创建的主菜单中找到不同的文本居中方式,但我尝试过的所有方法都将字符串从第一个字母中心化。有没有办法确定传入的字符串的长度,然后从中找出中心?

2 个答案:

答案 0 :(得分:1)

如果您正在使用JLabel,请使用center属性重载构造函数。例如:

label = new JLabel("insert text here");

label = new JLabel("insert text here", SwingConstants.CENTER);

答案 1 :(得分:0)

我前一段时间写了this

/**
 * This method centers a <code>String</code> in 
 * a bounding <code>Rectangle</code>.
 * @param g - The <code>Graphics</code> instance.
 * @param r - The bounding <code>Rectangle</code>.
 * @param s - The <code>String</code> to center in the
 * bounding rectangle.
 * @param font - The display font of the <code>String</code>
 * 
 * @see java.awt.Graphics
 * @see java.awt.Rectangle
 * @see java.lang.String
 */
public void centerString(Graphics g, Rectangle r, String s, 
        Font font) {
    FontRenderContext frc = 
            new FontRenderContext(null, true, true);

    Rectangle2D r2D = font.getStringBounds(s, frc);
    int rWidth = (int) Math.round(r2D.getWidth());
    int rHeight = (int) Math.round(r2D.getHeight());
    int rX = (int) Math.round(r2D.getX());
    int rY = (int) Math.round(r2D.getY());

    int a = (r.width / 2) - (rWidth / 2) - rX;
    int b = (r.height / 2) - (rHeight / 2) - rY;

    g.setFont(font);
    g.drawString(s, r.x + a, r.y + b);
}