文章目录
- 解决问题
- 代码实现
- 使用简述
解决问题
解决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);