这篇文章主要讲解了“Java Graphics怎么实现界面显示文字并换行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Graphics怎么实现界面显示文字并换行”吧!
问题是没有很好的换行
在调用时显示想处理的字符
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"
+ "醉里挑灯看剑,梦回吹角连营");
}
}
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怎么实现界面显示文字并换行”的内容了,经过本文的学习后,相信大家对Java Graphics怎么实现界面显示文字并换行这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。