2012-09-10 48 views
0

的 「真實」 的寬度如果我新的像這樣使用labelField:獲取的LabelField(黑莓)

LabelField label = new LabelField("long longgggg long text"); 

它表明:

-------------- ---------
| long longggg     |
|長文本            |
-----------------------

,如果我使用label.getWidth(),它給人的寬度:

| long longggg     |

,但我需要的是寬度:

|長longggg

任何解決方案?

+0

它返回的'寬度| long long |因爲我認爲它使用了所有可用的寬度。您可以通過在該LabelField上應用顏色背景來檢查它。但是,如果您不希望LabelField佔用所有空間,則父級管理員需要控制它允許的空間。 – Rupak

+1

爲什麼你需要這個寬度? –

+0

因爲我需要在LabelField後面繪製背景矩形,我不需要不必要的。 – Kevin

回答

0

檢查getPreferedWidth()來獲取長度。

如果已應用的任何字體比你需要得到

<font object>.getAdvance(label.getText()) 
+0

然後它將返回「long long long long text」的長度,而不是「LabelField」使用的實際寬度。 – Rupak

0

下面是我用它來獲取標籤的實際高度與多條線路的方法:

public int getPreferredHeight() { 
     String text = getText(); 

     int maxWidth = getManager().getPreferredWidth(); 
     String[] words = StringUtilities.stringToWords(text); 
     int lastWordAdvance = 0; 
     int lines = 1; 
     for (int i = 0; i < words.length; i++) { 
      int wordAdvance = getFont().getAdvance(words[i]); 
      if (lastWordAdvance + wordAdvance < maxWidth) { 
       lastWordAdvance += wordAdvance; 
      } else { 
       lines++; 
       lastWordAdvance = wordAdvance; 
      } 
     } 
     return (int)lines * getFont().getHeight(); 
    } 

它經過一個關鍵詞通過一個計算進度,試圖找出我們的標籤真正使用了多少行。 然後我使用getFont()。getHeight()來確定總高度。

您可以使用從我的例子提前計算部分,以獲取標籤的實際寬度。 要做到這一點,您可以使用Math.max()方法來確定最大線寬。