Java Graphics and 界面显示文字并换行
问题是没有很好的换行
在调用时显示想处理的字符
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 界面显示文字并换行相关推荐
- Java实现在线word文档添加铺满效果文字水印,文字可换行
Java实现在线word文档添加铺满效果文字水印,文字可换行 使用插件Aspose.words for java 生成水印的工具类 调用生成水印方法 需求:为在线预览的word文档添加自定义水印,还要 ...
- Java Graphics绘制表格和直方图
Java Graphics绘制表格和直方图 最近有一个需求是使用Java的swing中Graphics绘制表格和直方图,感觉还是有点意思记录一下,先上图. 开始感觉有点复杂,其实和自己在Windo ...
- 通过JAVA代码,将文字生成图片
用java语言,把文字部分生成图片 public class Test {public static void main(String args[]) {String tep = "中新网1 ...
- css如何让文字不换行,css如何让文字不换行显示?
在CSS中,可以通过white-space属性来实现文字不换行显示:只要将white-space属性的值为nowrap就可强制文字不换行. white-space属性指定元素内的空白怎样处理.它有以下 ...
- Java调用百度OCR文字识别API实现图片文字识别软件
java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...
- C#中在panel上写文字并换行的方法
前段时间在优化项目时,突然想到在Panel上显示文字并换行的问题.当有一段文字需要显示并且最好是显示在Panel.于是我就动手写了下,做了一个Demo程序,现在将主要的代码贴出来,如果存在不足还希望能 ...
- canvas绘制的文字如何换行
<html><head><title>canvas绘制的文字如何换行</title><style type="text/css" ...
- html 行内超出隐藏,css如何设置文字不换行超出隐藏?
在CSS中可以使用white-space属性配合overflow属性来实现文字不换行,且超出部分隐藏.下面本篇文章就来给大家具体介绍一下,希望对大家有所帮助. white-space属性指定元素内的空 ...
- java 字符串文字筛选_重新开始Java的原始字符串文字讨论
java 字符串文字筛选 在2018年12月宣布 将从JDK 12中删除原始字符串文字 . 现在,在新的一年中,与Java中原始字符串文字的设计有关的讨论又开始了. 在琥珀色专家OpenJDK邮件列表 ...
最新文章
- CYQ.Data V4系列全面开源(2013-08-04)
- weblogic缓存导致的网页验证码无法获取到
- IntelliJ IDEA14 配置 SVN
- Java 14 新功能介绍!
- java多线程为啥一直用的一个线程_一个Java多线程的问题,颠覆了我多年的认知!...
- HeapSnap工具原理及其应用
- usb调试助手_米卓同屏助手 | 刷短视频必备,一键打通“任督二脉”,双端
- java 链表两数相加
- 解决the application was unable to start correctly(0x000007b)与 缺少VCRUNTIME140.dll
- notepad下载(官网进不去)
- 微信公众号主体已注销 如何办理账号迁移和公证书?
- 基于云原生的私有化交付PAAS平台
- windows技巧--win7修改锁屏壁纸(不用软件)
- 如何提升自己的短视频质量?三个小技巧来帮忙,助你做优质内容
- 2022.02.09_Java学习总结_网络编程、正则表达式
- platform模型
- 拼多多百亿补贴的最大赢家是苹果
- 基于PLC的备用电源自动投入系统设计
- 三招教你挑选出好木耳
- php代码怎么注释符号,Php入门教程之PHP注释符号和格式