Java Graphics怎么实现界面显示文字并换行
导读:本文共3152.5字符,通常情况下阅读需要11分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:实现效果问题是没有很好的换行在调用时显示想处理的字符实现代码Main.javapublicclassMain{publicstaticvoidmain(String[]strings){Stringpoem="破阵子·为陈同甫赋壮词以寄之\r\n"+"作者:辛弃疾\r\n"+"\r\n"+"醉里挑灯看剑,梦回吹角连营... ...
目录
(为您整理了一些要点),点击可以直达。实现效果
问题是没有很好的换行
在调用时显示想处理的字符
实现代码
Main.java
publicclassMain{publicstaticvoidmain(String[]strings)
{
Stringpoem="破阵子·为陈同甫赋壮词以寄之\r\n"
+"作者:辛弃疾\r\n"
+"\r\n"
+"醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n"
+"马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!";AlgoFrameframe=newAlgoFrame("Java",poem,600,600);
System.out.print("行路难,行路难,多歧路,今安在?\n"
+"醉里挑灯看剑,梦回吹角连营");
}
}
AlgoFrame.java
importjava.awt.BasicStroke;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.geom.Ellipse2D;
importjava.awt.geom.Rectangle2D;importjavax.swing.*;
publicclassAlgoFrameextendsJFrame{
privateintcanvasWidth;
privateintcanvasHeight;
publicAlgoFrame(Stringtitle,Stringpoem,intcanvasWidth,intcanvasHeight){super(title);
this.canvasHeight=canvasHeight;
this.canvasWidth=canvasWidth;//AlgoCanvascanvas=newAlgoCanvas();
AlgoCanvascanvas=newAlgoCanvas(poem);setContentPane(canvas);
pack();setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}publicAlgoFrame(Stringtitle){
this(title,"",1024,768);
}publicintgetCanvasWidth(){returncanvasWidth;}
publicintsetCanvasHeight(){returncanvasHeight;}privateclassAlgoCanvasextendsJPanel{
Fontpf=newFont("Helvetica",Font.BOLD,20);
Stringpoem="";//Stringpoem="破阵子·为陈同甫赋壮词以寄之\r\n"
//+"作者:辛弃疾\r\n"
//+"\r\n"
//+"醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声,沙场秋点兵。\r\n"
//+"马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生!";publicAlgoCanvas(Stringstrs){
this.poem=strs;
}@Override
publicvoidpaintComponent(Graphicsgra){Graphics2Dgraphics2d=(Graphics2D)gra;
intstrokeWidth=5;
graphics2d.setStroke(newBasicStroke(strokeWidth));graphics2d.setColor(Color.RED);
Ellipse2Dcircle=newEllipse2D.Double(60,60,300,300);
graphics2d.draw(circle);graphics2d.setColor(Color.BLACK);
Rectangle2Drect=newRectangle2D.Double(50,50,320,320);
graphics2d.draw(rect);graphics2d.setColor(Color.blue);
Ellipse2Dcircle2=newEllipse2D.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
publicDimensiongetPreferredSize(){
//System.out.println("running");
returnnewDimension(canvasWidth,canvasHeight);
}//字符串总宽度
privateintgetStringLength(Graphicsg,Stringstr){
char[]strcha=str.toCharArray();
intstrWidth=g.getFontMetrics().charsWidth(strcha,0,str.length());
System.out.println("字符总宽度:"+strWidth);
returnstrWidth;
}////每一行字符串宽度自定义也就是画布中一行的宽度
//introwWidth=1110;
////字符串字符的个数
//intstrnum=str.length();
////每一行字符的个数privateintgetRowStrNum(intstrnum,introwWidth,intstrWidth)
{
introwstrnum=0;
rowstrnum=(rowWidth*strnum)/strWidth;
System.out.println("每行的字符数:"+rowstrnum);
returnrowstrnum;
}//字符行数
privateintgetRows(intstrWidth,introwWidth){
introws=0;
if(strWidth%rowWidth>0){
rows=strWidth/rowWidth+1;
}else{
rows=strWidth/rowWidth;
}
System.out.println("行数:"+rows);
returnrows;
}//字符高度
privateintgetStringHeight(Graphicsg){
intheight=g.getFontMetrics().getHeight();
System.out.println("字符高度:"+height);
returnheight;
}//注意设置font才能计算宽度和高度
//开始绘制
privatevoiddrawStringWithFontStyleLineFeed(Graphicsg,StringstrContent,intloc_X,intloc_Y,Fontfont)
{
g.setFont(font);//获取字符串字符的总宽度
intstrWidth=getStringLength(g,strContent);//每一行字符串宽度
introwWidth=500;
System.out.println("每行字符宽度:"+rowWidth);//获取字符高度
intstrHeight=getStringHeight(g);//字符串总个数
System.out.println("字符串总个数:"+strContent.length());
if(strWidth>rowWidth){introwstrnum=getRowStrNum(strContent.length(),rowWidth,strWidth);
introws=getRows(strWidth,rowWidth);Stringtemp="";
for(inti=0;i<rows;i++){
//获取各行的String
if(i==rows-1){
//最后一行
temp=strContent.substring(irowstrnum,strContent.length());
}else{
temp=strContent.substring(irowstrnum,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怎么实现界面显示文字并换行的详细内容,希望对您有所帮助,信息来源于网络。