在java的GUI中实现文本的多种对齐模式

文章目录

  • 解决问题
  • 代码实现
  • 使用简述

解决问题

解决Graphics对象的drawString函数无法设置文本对齐方式的问题

代码实现

    public static final int X_LEFT = 1;//水平方向居左对齐
    public static final int X_CENTER = 2;//水平方向居中对齐
    public static final int X_RIGHT = 4;//水平方向居右对齐
    public static final int Y_TOP = 8;//垂直方向居上对齐
    public static final int Y_CENTER = 16;//垂直方向居中对齐
    public static final int Y_BOTTOM = 32;//垂直方向居下对齐

    /***
     *
     * @param g Graphics绘制对象
     * @param x 文本横坐标,向右为正
     * @param y 文本纵坐标,向下为正
     * @param text  文本内容
     * @param mode  文本对齐模式。水平方向:左、中、右;垂直方向:上、中、下。水平垂直同时居中:X_CENTER|Y_CENTER
     */
    public static void DrawText(Graphics g, int x, int y, String text, int mode) {
        Font font = g.getFont();
        FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
        //计算文本的宽高
        int height = metrics.getAscent() + metrics.getDescent();
        int width = metrics.stringWidth(text);
        //根据模式修改坐标
        if ((mode & X_LEFT) == X_LEFT) {
            //x本身就是左上角位置
        } else if ((mode & X_CENTER) == X_CENTER) {
            x = x - width / 2;
        } else if ((mode & X_RIGHT) == X_RIGHT) {
            x = x - width;
        }
        if ((mode & Y_TOP) == Y_TOP) {
            y += metrics.getAscent();
        } else if ((mode & Y_CENTER) == Y_CENTER) {
            y += metrics.getAscent() - (height) / 2;
        } else if ((mode & Y_BOTTOM) == Y_BOTTOM) {
            y -= metrics.getDescent();
        }
        g.setFont(font);
        g.drawString(text, x, y);
    }

使用简述

设置mode参数时,在水平方向的三种模式中选择一种,在垂直方向的三种模式中选择一种,选出的两个模式使用按位或运算符|连接
示例如下(g是一个Graphics对象):

DrawText(g, 200, 300, "Hello Word!", X_CENTER|Y_TOP);
DrawText(g, 400, 200, "你好 世界!", X_RIGHT|Y_CENTER);

参考文章

你可能感兴趣的:(java,GUI,Graphics,drawString,文本对齐)