2012-05-10 47 views
5

我正在J2ME中編寫針對Java Personal Basis Profile的代碼。我需要以像素爲單位來測量AttributedString的寬度。在J2ME中測量AttributedString的寬度

在Java SE,我會從我的AttributedString的AttributedCharacterIterator並將它傳遞給FontMetrics #getStringBounds,但在J2ME PBP,FontMetrics對象不具有getStringBounds方法,或接受一個CharacterIterator進行任何其他方法。

我該怎麼辦?

+0

我應該添加:我真正需要做的是將AttributedString包裝成行。使用LineBreakMeasurer會更容易,而我在J2ME PBP中也沒有。 :-( –

+0

組件用來顯示用戶界面的畫布?Canvas或LCD UI(Form,Alert,List ...)?你可以附上一張圖片以便更好地理解嗎? –

回答

0

可以找到文本的寬度像素。

String text = "Hello world"; 
int widthOfText = fontObject.charsWidth(text.toCharArray(), 0, text.length()); 

現在,你將有文字的像素寬度可變widthOfText;

+0

這不會給你一個AttributedString的寬度,其中一部分字符串是粗體/斜體,這就是我的問題所在(粗體/斜體字通常比正常字體寬)。 –

2

我在這方面非常努力。我需要將面板的大小調整爲AttributedString的寬度。我的解決辦法是:

double GetWidthOfAttributedString(Graphics2D graphics2D, AttributedString attributedString) { 
    AttributedCharacterIterator characterIterator = attributedString.getIterator(); 
    FontRenderContext fontRenderContext = graphics2D.getFontRenderContext(); 
    LineBreakMeasurer lbm = new LineBreakMeasurer(characterIterator, fontRenderContext); 
    TextLayout textLayout = lbm.nextLayout(Integer.MAX_VALUE); 
    return textLayout.getBounds().getWidth(); 
} 

它使用LineBreakMeasurer找到字符串一個TextLayout,然後簡單地檢查與TextLayout的。 (包裝寬度設置爲Integer.MAX_VALUE,因此比這更寬的文本將被截斷)。