Java Graphics如何实现界面显示文字并换行?
实现效果
问题是没有很好的换行
在调用时显示想处理的字符
实现代码
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; } @Override public 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); } @Override public 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如何实现界面显示文字并换行?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。
