java Graphics2D drawString()內容換行問題
阿新 • • 發佈:2019-01-10
//字串總寬度
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; }
ps:Graphics 注意設定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=1110; 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); } }