获得;“真正的”;LabelField(BlackBerry)的宽度

获得;“真正的”;LabelField(BlackBerry)的宽度,blackberry,labelfield,Blackberry,Labelfield,如果我有一个像这样的新实验室: LabelField label = new LabelField("long longgggg long text"); 它表明: ----------------------- |long Longgg | |长文本| ----------------------- 如果我使用label.getWidth(),它将提供以下宽度: |long Longgg | 但我需要的是: |隆隆 有解决方案吗?检查getPreferedWidth()以获取长度 如果您应用

如果我有一个像这样的新实验室:

LabelField label = new LabelField("long longgggg long text");
它表明:

-----------------------
|long Longgg |
|长文本|
-----------------------

如果我使用label.getWidth(),它将提供以下宽度:

|long Longgg |

但我需要的是:

|隆隆

有解决方案吗?

检查getPreferedWidth()以获取长度

如果您应用了超出需要的任何字体

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

以下是我用来获取多行标签实际高度的方法:

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(); 
    }
public int getPreferredHeight(){
String text=getText();
int maxWidth=getManager().getPreferredWidth();
String[]words=StringUtilities.StringToWord(文本);
int lastWordAdvance=0;
int行=1;
for(int i=0;i
它一个接一个地浏览单词并计算前进,试图找出我们的标签实际使用了多少行。 然后我使用getFont().getHeight()来确定总高度

您可以使用我的示例中计算advance的部分来获得标签的实际宽度。
为此,您可以使用Math.max()方法确定最大线宽。

它返回
|long longgg |
的宽度,因为我认为它使用了所有可用的宽度。您可以通过在该LabelField上应用彩色背景来检查它。但是如果你不想让LabelField占据所有的空间,那么上级经理需要控制它允许该字段的空间。因为我需要在LabelField后面画一个背景矩形,我不需要不必要的。这很难理解。相反,尝试将标签添加到固定宽度的管理器中,然后调用` manager.setBackground'。然后它将返回“long longgg long text”的长度,而不是
LabelField
使用的实际宽度。