1. /**
  2. * 文字超出限定长度自动换行
  3. *
  4. * @param g 画布
  5. * @param font 字体样式
  6. * @param text 文字
  7. * @param widthLength 最大长度 (多少长度后需要换行)
  8. * @param x 文字位置坐标 x
  9. * @param y 文字位置坐标 Y
  10. * @param yn 每次换行偏移多少pt
  11. */
  12. private void drawString(Graphics2D g, Font font, String text, int widthLength, int x, int y, int yn) {
  13.  
  14. FontMetrics fg = g.getFontMetrics(font);
  15. List<String> ls = new ArrayList<>(2);
  16. getListText(fg, text, widthLength, ls);
  17. for (int i = 0; i < ls.size(); i++) {
  18. if (i == 0) {
  19. g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y));
  20. } else {
  21. g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y + yn));
  22. }
  23. }
  24. }
  25.  
  26. /**
  27. * 递归 切割字符串
  28. * @param fg
  29. * @param text
  30. * @param widthLength
  31. * @param ls
  32. */
  33. private void getListText(FontMetrics fg, String text, int widthLength, List<String> ls) {
  34. String ba = text;
  35. boolean b = true;
  36. int i = 1;
  37. while (b) {
  38. if (fg.stringWidth(text) > widthLength) {
  39. text = text.substring(0, text.length() - 1);
  40. i++;
  41. } else {
  42. b = false;
  43. }
  44. }
  45. if (i != 1) {
  46. ls.add(ba.substring(0, ba.length() - i));
  47. getListText(fg, ba.substring(ba.length() - i), widthLength, ls);
  48. } else {
  49. ls.add(text);
  50. }
  51. }

画图中需要填写文字,而文字大小不固定的时候就会超出画布,显示不了文字,就需要自动换行。

java 画图 Graphics 文字自动换行的更多相关文章

  1. java画图之曲线拖动

    目标:在窗体上按下鼠标按键.然后拖动鼠标,在按下和拖动之间绘制曲线 事件机制 事件源对象:窗体 事件监听方法:addMouseListener(MouseListener l);addMouseMot ...

  2. java画图之初体验

    1.实现画图程序所需的API类 JFrame JButton ActionListener              动作事件接口 ActionEvent                        ...

  3. JAVA 跑马灯文字效果

    JAVA跑马灯文字效果的实现: 1. 首先创建一个继承JFrame类的HorseRaceLightTextFrame窗体类,代码如下: package com.example.horseracelig ...

  4. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...

  5. canvas文字自动换行、圆角矩形画法、生成图片手机长按保存、方形图片变圆形

    canvas的文字自动换行函数封装 // str:要绘制的字符串 // canvas:canvas对象 // initX:绘制字符串起始x坐标 // initY:绘制字符串起始y坐标 // lineH ...

  6. JAVA 画图机制

    java学习脚印:深入java绘图机制 写在前面 封装性越好的类在使用时,只要清楚接口即可,而不应该让程序员了解其内部结构; 对于平常的绘图来讲,java绘图机制无需了解太多,但是朦胧容易产生错误,绘 ...

  7. java画图程序_图片用字母画出来_源码发布_版本二

    在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...

  8. java画图程序_图片用字母画出来_源码发布

    在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...

  9. java画图程序_图片用字母画出来

    最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...

随机推荐

  1. Nginx设置禁止通过IP访问服务器并且只能通过指定域名访问

    为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,需要在nginx上设置禁止通过IP访问服务器,只能通过域名访问. 最关键的一点是,在server的设置里面添加这么一行: liste ...

  2. Poj 2599 Godfather(树的重心)

    Godfather Time Limit: 2000MS Memory Limit: 65536K Description Last years Chicago was full of gangste ...

  3. TensorFlow(四):手写数字识别

    一:数据集 采用MNIST数据集:-->官网 数据集被分成两部分:60000行的训练数据集和10000行的测试数据集. 其中每一张图片包含28*28个像素,我们把这个数组展开成一个向量,长度为2 ...

  4. angular2事件触发

    输入框输入过程触发Select()方法. <input type="text" name="code" [(ngModel)]="code&qu ...

  5. (转)Redis Cluster(集群)

    一.概述 在前面的文章中介绍过了redis的主从和哨兵两种集群方案,redis从3.0版本开始引入了redis-cluster(集群).从主从-哨兵-集群可以看到redis的不断完善:主从复制是最简单 ...

  6. mybatis oracle 逆向工程

  7. Linux MySQL 储存中文失败简单解决办法

    如图,保存的中文都变成了??? show create table table_name;可以查到表的默认编码 这里看到默认的字符集是latin1,而不是utf8 需要修改 alter databas ...

  8. 怎么看部分元素的js代码?

  9. Linux下SSH命令使用方法详解(摘自网络)

    备注:检查自己的linux系统中是否已经安装了某一些软件的命令: rpm -qa | grep 软件名  例如 rpm -qa | grep  vsftpd 1.查看SSH客户端版本 有的时候需要确认 ...

  10. Python 学习随笔 - 2 - list 、tuple 、dict、set 特殊数据类型 及 实际应用

    1.list list是一种有序的集合,可以随时添加和删除其中的元素;  和C语言不同的地方是list里的元素甚至可以是不同类型的,甚至是另个list 例如:['A', 'B', 'C']   ['A ...