Graphics2D二维码绘制自动换行文本方法
/** * 绘制自动换行文本(默认最大3行,代码中的数字都是调试好的,不可轻举妄动!!) * * @param g {@link Graphics2D} * @param str 文本 * @param y 坐标Y * @param width 文字区域总宽度 * @param lineHeight 每行高度(为空时取字号大小) */ public static Integer drawWrapString(Graphics2D g, String str, int y, int width, Integer lineHeight) { Font font = g.getFont(); FontMetrics fontMetrics = new JLabel(str).getFontMetrics(font); if (lineHeight == null) { lineHeight = font.getSize(); } char[] chars = str.toCharArray(); List<StringBuilder> lines = new ArrayList<>(); int s = 0; StringBuilder p = null; for (char c : chars) { int cWidth = fontMetrics.stringWidth(c + ""); if (p == null || s + cWidth >= width) { p = new StringBuilder(); lines.add(p); s = cWidth; } else { s += cWidth; } p.append(c); } Integer maxLine = lines.size(); for (int i = 0; i < maxLine; i++) { int x1 = (width - g.getFontMetrics().stringWidth(lines.get(i).toString())/2); g.drawString(lines.get(i).toString(), x1, y + ((4 - maxLine + i) * (lineHeight))); } return maxLine; }
研究了好长时间,记下来,方便后来人
只要开始,任何时候都不晚,加油!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?