国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在圖形編程中用TextLayout精確繪制字符串

2019-11-18 15:23:12
字體:
來源:轉載
供稿:網友

  作者:家居貓

在編寫 java 圖形程序時,大家通常是用 java.awt.Graphics.drawString( int x, int y ) 來畫字符串。但是其效果往往不能滿足我們的要求。
其實,Java2D提供了更先進的繪制字符串的方法,用 TextLayout 可以繪制出相當令人滿足的效果。下面是一個例子供大家參考:

//設置字體
Font mFont = new Font( font, style, (int)size );

//保存當前的著色參數
RenderingHints rhs = g.getRenderingHints();

//在 linux 畫中文字符時,打開抗鋸齒功能可能會影響顯示效果。
//所以這里將抗鋸齒功能關掉。你也可以經過測試來決定是否關閉此功能。
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);

//下面這段代碼測試字符串可能顯示的寬度。假如寬度大于 limitWidth,則用 ... 代替多余的部分。
if (limitWidth != -1) {
AttributedString as = new AttributedString(buf);
as.addAttribute( TextAttribute.FONT, mFont );
TextMeasurer tm = new TextMeasurer(as.getIterator(), g.getFontRenderContext());
int limitIndex = tm.getLineBreakIndex(0, limitWidth);
if (buf.length() > limitIndex) {
buf = buf.substring(0, limitIndex) + "...";
}
}

//構造 TextLayout
TextLayout tl = new TextLayout(buf, mFont, g.getFontRenderContext());

//構造下面這個 TextLayout 主要是為了得到英文字符串的全高度。
//因為 "abc" 與 "obj" 所占的高度是不一樣的,"j"多占了下面的一部分。
TextLayout tmptl = new TextLayout("Ig", mFont, g.getFontRenderContext());
Rectangle2D tmPRt = tmptl.getBounds();

//恢復舊的著色參數
g.setRenderingHints(rhs);

//畫字符串,注重這里的 x, y 坐標是 TextLayout 所占矩形框的左上角坐標。
tl.draw(g, x, (float)(y + tmprt.getHeight()));

--摘自 http://www.javaidea.net

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郓城县| 融水| 乌鲁木齐市| 九龙城区| 克东县| 宁强县| 花莲县| 锡林浩特市| 明溪县| 娄烦县| 盘山县| 拜城县| 黄浦区| 新乡市| 佛山市| 沭阳县| 梁山县| 曲水县| 上蔡县| 南涧| 利川市| 临潭县| 木兰县| 漾濞| 哈巴河县| 砀山县| 桦川县| 达拉特旗| 昌都县| 江源县| 肥城市| 杭州市| 蓬溪县| 靖江市| 台江县| 左权县| 晋宁县| 晋宁县| 得荣县| 锡林郭勒盟| 东海县|