/** * 文字超出限定长度自动换行 * * @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); } }
画图中需要填写文字,而文字大小不固定的时候就会超出画布,显示不了文字,就需要自动换行。