java画图Graphics文字自动换行

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java画图Graphics⽂字⾃动换⾏/**
* ⽂字超出限定长度⾃动换⾏
*
* @param g 画布
* @param font 字体样式
* @param text ⽂字
* @param widthLength 最⼤长度(多少长度后需要换⾏)
* @param x ⽂字位置坐标 x
* @param y ⽂字位置坐标 Y
* @param yn 每次换⾏偏移多少pt
*/
private void 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), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y));
} else {
g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y + yn));
}
}
}
/**
* 递归切割字符串
* @param fg
* @param text
* @param widthLength
* @param ls
*/
private 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);
}
}
画图中需要填写⽂字,⽽⽂字⼤⼩不固定的时候就会超出画布,显⽰不了⽂字,就需要⾃动换⾏。

相关文档
最新文档