问题是没有很好的换行

在调用时显示想处理的字符

Main,java


public class Main {public  static void main(String[] strings){String poem = "破阵子·为陈同甫赋壮词以寄之\r\n"+ "作者:辛弃疾\r\n"+ "\r\n"+ "醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n"+ "马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!";AlgoFrame frame = new AlgoFrame("Java",poem, 600, 600);System.out.print("行路难,行路难,多歧路,今安在?\n"+ "醉里挑灯看剑,梦回吹角连营");}
}

AlgoFrame,java

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;import javax.swing.*;public class AlgoFrame extends JFrame {private int canvasWidth;private int canvasHeight;public AlgoFrame(String title, String poem, int canvasWidth, int canvasHeight){super(title);this.canvasHeight = canvasHeight;this.canvasWidth = canvasWidth;//        AlgoCanvas canvas = new AlgoCanvas();AlgoCanvas canvas = new AlgoCanvas(poem);setContentPane(canvas);pack();setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}public AlgoFrame(String title){this(title, "", 1024, 768);}public int getCanvasWidth(){return  canvasWidth;}public int setCanvasHeight() {return canvasHeight;}private class AlgoCanvas extends JPanel{Font pf = new Font("Helvetica", Font.BOLD,20);String poem = "";//       String poem = "破阵子·为陈同甫赋壮词以寄之\r\n"
//              + "作者:辛弃疾\r\n"
//              + "\r\n"
//              + "醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n"
//              + "马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!";public AlgoCanvas (String strs) {this.poem = strs;}@Overridepublic void paintComponent(Graphics gra) {Graphics2D graphics2d = (Graphics2D)gra;int strokeWidth = 5;graphics2d.setStroke(new BasicStroke(strokeWidth));graphics2d.setColor(Color.RED);Ellipse2D circle = new Ellipse2D.Double(60, 60, 300, 300);graphics2d.draw(circle);graphics2d.setColor(Color.BLACK);Rectangle2D rect = new Rectangle2D.Double(50, 50, 320, 320);graphics2d.draw(rect);graphics2d.setColor(Color.blue);Ellipse2D circle2 = new Ellipse2D.Float(80, 80, 260, 260);
//            graphics2d.draw(circle2);graphics2d.fill(circle2);//            显示辛弃疾的词graphics2d.setColor(Color.black);
//            graphics2d.setFont(pf);
//            graphics2d.drawString(poem, 10, canvasHeight-100);drawStringWithFontStyleLineFeed(graphics2d,poem, 10, canvasHeight-100, pf);}@Overridepublic Dimension getPreferredSize() {
//          System.out.println("running");return new Dimension(canvasWidth, canvasHeight);}//字符串总宽度private int  getStringLength(Graphics g, String str) {char[]  strcha=str.toCharArray();int strWidth = g.getFontMetrics().charsWidth(strcha, 0, str.length());System.out.println("字符总宽度:"+strWidth);return strWidth;}//        //每一行字符串宽度  自定义  也就是画布中一行的宽度
//      int rowWidth=1110;
//      //字符串字符的个数
//      int strnum= str.length();
//      //每一行字符的个数private int getRowStrNum(int strnum,int rowWidth,int strWidth){int rowstrnum=0;rowstrnum=(rowWidth*strnum)/strWidth;System.out.println("每行的字符数:"+rowstrnum);return rowstrnum;}//字符行数private  int  getRows(int strWidth,int rowWidth){int rows=0;if(strWidth%rowWidth>0){rows=strWidth/rowWidth+1;}else{rows=strWidth/rowWidth;}System.out.println("行数:"+rows);return rows;}//字符高度private int  getStringHeight(Graphics g) {int height = g.getFontMetrics().getHeight();System.out.println("字符高度:"+height);return height;}//        注意设置font 才能计算宽度和高度
//      开始绘制private  void  drawStringWithFontStyleLineFeed(Graphics g, String strContent, int loc_X, int loc_Y, Font font){g.setFont(font);//获取字符串 字符的总宽度int strWidth = getStringLength(g,strContent);//每一行字符串宽度int rowWidth = 500;System.out.println("每行字符宽度:"+rowWidth);//获取字符高度int strHeight=getStringHeight(g);//字符串总个数System.out.println("字符串总个数:"+strContent.length());if(strWidth>rowWidth){int rowstrnum=getRowStrNum(strContent.length(),rowWidth,strWidth);int  rows= getRows(strWidth,rowWidth);String temp="";for (int i = 0; i < rows; i++) {//获取各行的String if(i==rows-1){//最后一行temp=strContent.substring(i*rowstrnum,strContent.length());}else{temp=strContent.substring(i*rowstrnum,i*rowstrnum+rowstrnum);}if(i>0){//第一行不需要增加字符高度,以后的每一行在换行的时候都需要增加字符高度loc_Y=loc_Y+strHeight;}g.drawString(temp, loc_X, loc_Y);}}else{//直接绘制g.drawString(strContent, loc_X, loc_Y);}}}}

在类里面测试

Main.java


public class Main {public  static void main(String[] strings){AlgoFrame frame = new AlgoFrame("Java", 600, 600);System.out.print("行路难,行路难,多歧路,今安在?\n"+ "醉里挑灯看剑,梦回吹角连营");}
}

AlgoFrame.java

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;import javax.swing.*;public class AlgoFrame extends JFrame {private int canvasWidth;private int canvasHeight;public AlgoFrame(String title,  int canvasWidth, int canvasHeight){super(title);this.canvasHeight = canvasHeight;this.canvasWidth = canvasWidth;AlgoCanvas canvas = new AlgoCanvas();setContentPane(canvas);pack();setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}public AlgoFrame(String title){this(title, 1024, 768);}public int getCanvasWidth(){return  canvasWidth;}public int setCanvasHeight() {return canvasHeight;}private class AlgoCanvas extends JPanel{Font pf = new Font("Helvetica", Font.BOLD,20);String poem = "破阵子·为陈同甫赋壮词以寄之\r\n"+ "作者:辛弃疾\r\n"+ "\r\n"+ "醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n"+ "马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!";@Overridepublic void paintComponent(Graphics gra) {Graphics2D graphics2d = (Graphics2D)gra;int strokeWidth = 5;graphics2d.setStroke(new BasicStroke(strokeWidth));graphics2d.setColor(Color.RED);Ellipse2D circle = new Ellipse2D.Double(60, 60, 300, 300);graphics2d.draw(circle);graphics2d.setColor(Color.BLACK);Rectangle2D rect = new Rectangle2D.Double(50, 50, 320, 320);graphics2d.draw(rect);graphics2d.setColor(Color.blue);Ellipse2D circle2 = new Ellipse2D.Float(80, 80, 260, 260);
//            graphics2d.draw(circle2);graphics2d.fill(circle2);//            显示辛弃疾的词graphics2d.setColor(Color.black);
//            graphics2d.setFont(pf);
//            graphics2d.drawString(poem, 10, canvasHeight-100);drawStringWithFontStyleLineFeed(graphics2d,poem, 10, canvasHeight-100, pf);}@Overridepublic Dimension getPreferredSize() {
//          System.out.println("running");return new Dimension(canvasWidth, canvasHeight);}//字符串总宽度private int  getStringLength(Graphics g, String str) {char[]  strcha=str.toCharArray();int strWidth = g.getFontMetrics().charsWidth(strcha, 0, str.length());System.out.println("字符总宽度:"+strWidth);return strWidth;}//        //每一行字符串宽度  自定义  也就是画布中一行的宽度
//      int rowWidth=1110;
//      //字符串字符的个数
//      int strnum= str.length();
//      //每一行字符的个数private int getRowStrNum(int strnum,int rowWidth,int strWidth){int rowstrnum=0;rowstrnum=(rowWidth*strnum)/strWidth;System.out.println("每行的字符数:"+rowstrnum);return rowstrnum;}//字符行数private  int  getRows(int strWidth,int rowWidth){int rows=0;if(strWidth%rowWidth>0){rows=strWidth/rowWidth+1;}else{rows=strWidth/rowWidth;}System.out.println("行数:"+rows);return rows;}//字符高度private int  getStringHeight(Graphics g) {int height = g.getFontMetrics().getHeight();System.out.println("字符高度:"+height);return height;}//        注意设置font 才能计算宽度和高度
//      开始绘制private  void  drawStringWithFontStyleLineFeed(Graphics g, String strContent, int loc_X, int loc_Y, Font font){g.setFont(font);//获取字符串 字符的总宽度int strWidth = getStringLength(g,strContent);//每一行字符串宽度int rowWidth = 500;System.out.println("每行字符宽度:"+rowWidth);//获取字符高度int strHeight=getStringHeight(g);//字符串总个数System.out.println("字符串总个数:"+strContent.length());if(strWidth>rowWidth){int rowstrnum=getRowStrNum(strContent.length(),rowWidth,strWidth);int  rows= getRows(strWidth,rowWidth);String temp="";for (int i = 0; i < rows; i++) {//获取各行的String if(i==rows-1){//最后一行temp=strContent.substring(i*rowstrnum,strContent.length());}else{temp=strContent.substring(i*rowstrnum,i*rowstrnum+rowstrnum);}if(i>0){//第一行不需要增加字符高度,以后的每一行在换行的时候都需要增加字符高度loc_Y=loc_Y+strHeight;}g.drawString(temp, loc_X, loc_Y);}}else{//直接绘制g.drawString(strContent, loc_X, loc_Y);}}}}

Java Graphics and 界面显示文字并换行相关推荐

  1. Java实现在线word文档添加铺满效果文字水印,文字可换行

    Java实现在线word文档添加铺满效果文字水印,文字可换行 使用插件Aspose.words for java 生成水印的工具类 调用生成水印方法 需求:为在线预览的word文档添加自定义水印,还要 ...

  2. Java Graphics绘制表格和直方图

    Java Graphics绘制表格和直方图 最近有一个需求是使用Java的swing中Graphics绘制表格和直方图,感觉还是有点意思记录一下,先上图. ​ 开始感觉有点复杂,其实和自己在Windo ...

  3. 通过JAVA代码,将文字生成图片

    用java语言,把文字部分生成图片 public class Test {public static void main(String args[]) {String tep = "中新网1 ...

  4. css如何让文字不换行,css如何让文字不换行显示?

    在CSS中,可以通过white-space属性来实现文字不换行显示:只要将white-space属性的值为nowrap就可强制文字不换行. white-space属性指定元素内的空白怎样处理.它有以下 ...

  5. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  6. C#中在panel上写文字并换行的方法

    前段时间在优化项目时,突然想到在Panel上显示文字并换行的问题.当有一段文字需要显示并且最好是显示在Panel.于是我就动手写了下,做了一个Demo程序,现在将主要的代码贴出来,如果存在不足还希望能 ...

  7. canvas绘制的文字如何换行

    <html><head><title>canvas绘制的文字如何换行</title><style type="text/css" ...

  8. html 行内超出隐藏,css如何设置文字不换行超出隐藏?

    在CSS中可以使用white-space属性配合overflow属性来实现文字不换行,且超出部分隐藏.下面本篇文章就来给大家具体介绍一下,希望对大家有所帮助. white-space属性指定元素内的空 ...

  9. java 字符串文字筛选_重新开始Java的原始字符串文字讨论

    java 字符串文字筛选 在2018年12月宣布 将从JDK 12中删除原始字符串文字 . 现在,在新的一年中,与Java中原始字符串文字的设计有关的讨论又开始了. 在琥珀色专家OpenJDK邮件列表 ...

最新文章

  1. CYQ.Data V4系列全面开源(2013-08-04)
  2. weblogic缓存导致的网页验证码无法获取到
  3. IntelliJ IDEA14 配置 SVN
  4. Java 14 新功能介绍!
  5. java多线程为啥一直用的一个线程_一个Java多线程的问题,颠覆了我多年的认知!...
  6. HeapSnap工具原理及其应用
  7. usb调试助手_米卓同屏助手 | 刷短视频必备,一键打通“任督二脉”,双端
  8. java 链表两数相加
  9. 解决the application was unable to start correctly(0x000007b)与 缺少VCRUNTIME140.dll
  10. notepad下载(官网进不去)
  11. 微信公众号主体已注销 如何办理账号迁移和公证书?
  12. 基于云原生的私有化交付PAAS平台
  13. windows技巧--win7修改锁屏壁纸(不用软件)
  14. 如何提升自己的短视频质量?三个小技巧来帮忙,助你做优质内容
  15. 2022.02.09_Java学习总结_网络编程、正则表达式
  16. platform模型
  17. 拼多多百亿补贴的最大赢家是苹果
  18. 基于PLC的备用电源自动投入系统设计
  19. 三招教你挑选出好木耳
  20. php代码怎么注释符号,Php入门教程之PHP注释符号和格式

热门文章

  1. jenkins下载与简单使用
  2. ceph pg不一致问题
  3. 学术不端网查重靠谱吗_知网查重链接哪个靠谱
  4. 高防服务器防御中“清洗”是什么意思
  5. 富文本编辑器simditor
  6. html5 拓扑图 切片,HTML5复杂拓扑图(四) 组织结构图
  7. 立刷提现显示服务器繁忙,为什么我的网页显示服务器繁忙,求大神教破除方法...
  8. [someip专题]vsomeip使用以及代码解析1
  9. bazel 的安装与卸载
  10. web开源框架大汇总