Java Graphics怎么实现界面显示文字并换行(graphics,java,开发技术)

时间:2024-04-27 12:03:34 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

实现效果

Java Graphics怎么实现界面显示文字并换行

问题是没有很好的换行

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

实现代码

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(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怎么实现界面显示文字并换行的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么使用C++的float、double判断是否等于0问题下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18