java绘制图片,并为图片填充文字,文字长度到达一定长度,需要换行展示,否则超出范围展示不全。
/**
* 文字超出限定长度自动换行
*
* @param g 画布
* @param font 字体样式
* @param text 文字
* @param widthLength 最大长度 (多少长度后需要换行)
* @param x 文字位置坐标 x
* @param y 文字位置坐标 Y
* @param yn 每次换行偏移多少pt
*/
public static boolean drawString(Graphics2D g, Font font, String text, int widthLength, int x, int y, int yn) {
FontMetrics fg = g.getFontMetrics(font);
List<String> ls = new ArrayList<>(2);
getListText(fg, text, widthLength, ls);
for (int i = 0; i < ls.size(); i++) {
if (i == 0) {
g.drawString(ls.get(i), x, y);
} else {
g.drawString(ls.get(i), x, (y + yn));
}
}
if (ls.size() > 1) {
return true;
}
return false;
}
/**
* 递归 切割字符串
*
* @param fg
* @param text
* @param widthLength
* @param ls
*/
public static void getListText(FontMetrics fg, String text, int widthLength, List<String> ls) {
String ba = text;
boolean b = true;
int i = 1;
while (b) {
if (fg.stringWidth(text) > widthLength) {
text = text.substring(0, text.length() - 1);
i++;
} else {
b = false;
}
}
if (i != 1) {
ls.add(ba.substring(0, ba.length() - i));
getListText(fg, ba.substring(ba.length() - i), widthLength, ls);
} else {
ls.add(text);
}
}