<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
問題是沒有很好的換行
在呼叫時顯示想處理的字元
public class Main { public static void main(String[] strings) { String poem = "破陣子·為陳同甫賦壯詞以寄之rn" + "作者:辛棄疾rn" + "rn" + "醉裡挑燈看劍,夢迴吹角連營。八百里分麾下炙,五十弦翻塞外聲,沙場秋點兵。rn" + "馬作的盧飛快,弓如霹靂弦驚。了卻君王天下事,贏得生前身後名。可憐白髮生!"; 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 = "破陣子·為陳同甫賦壯詞以寄之rn" // + "作者:辛棄疾rn" // + "rn" // + "醉裡挑燈看劍,夢迴吹角連營。八百里分麾下炙,五十弦翻塞外聲,沙場秋點兵。rn" // + "馬作的盧飛快,弓如霹靂弦驚。了卻君王天下事,贏得生前身後名。可憐白髮生!"; 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介面顯示文字內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45