实现效果
问题是没有很好的换行
在调用时显示想处理的字符
实现代码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.javaimport 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如何实现界面显示文字并换行?的详细内容。