2012-09-10 43 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()方法来确定最大线宽。