Blackberry Labelfield文本未换行

Blackberry Labelfield文本未换行,blackberry,Blackberry,下面的类扩展了labelfield,但当我显示大量文本时,它不会换行。文本只是在屏幕上留下痕迹。当我使用LabelField时,文本会自动换行。是否需要更新绘制方法 谢谢 import net.rim.device.api.ui.DrawStyle; import net.rim.device.api.ui.Font; import net.rim.device.api.ui.Graphics; import net.rim.device.api.ui.component.LabelField;

下面的类扩展了labelfield,但当我显示大量文本时,它不会换行。文本只是在屏幕上留下痕迹。当我使用LabelField时,文本会自动换行。是否需要更新绘制方法

谢谢

import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.LabelField;

public class FCLabelField extends LabelField {

    private Object text;
    private Font font;
    private int colour;
    private long style;

    public FCLabelField(Object text, long style , Font font, int colour) {
        super(text, style);
        this.text = text;
        this.font = font;
        this.colour = colour;
    }

    protected void paint(Graphics graphics) {

        graphics.setColor(colour);
        graphics.setFont(font);
        graphics.drawText(text.toString(), 0, 0, DrawStyle.HCENTER, getContentWidth());


    }
}
这项工程—

import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.LabelField;

public class FCLabelField extends LabelField {

    private Object text;
    private Font font;
    private int colour;
    private long style;

    public FCLabelField(Object text, long style , Font font, int colour) {
        super(text, style);
        this.text = text;
        this.colour = colour;
        super.setFont(font);
    }

    protected void paint(Graphics graphics) {

        graphics.setColor(this.colour);
        super.paint(graphics);

    }
}

在第一个版本中,您正在重写
paint
方法,而不是调用超类“
paint
方法。在第二种情况下,这允许基类中的代码绘制文本

如果不想调用超类“
paint
方法,则必须更改paint方法以计算要绘制的字符串的范围,并在适当的点拆分它,多次调用
drawText
以在不同的y位置分别绘制每个片段。默认情况下,
LabelField
中的
paint
方法就是这样做的,因此您需要对其进行仿真


当您确实调用超类
paint
方法时,在超类上设置字体有效而在
paint
方法中设置字体无效的原因是,超类的
paint
方法正在调用
Graphics
对象上的
setFont
,覆盖您刚才在
paint
方法中所做的操作。

Hmm,我想知道,您是否可以自己运行setColor和setFont语句,然后调用
super.paint(graphics)
?这应该可以解决您的问题。@Scott W您不妨将您的评论升级为答案。尝试了此操作后,行换行,但字体未更新。因此,它修复了一个错误,但似乎导致了另一个错误。在超级类上设置字体是可行的。请参阅对问题的编辑。我不知道为什么?谢谢你的帮助