Labelfield文本没有包装

时间:2011-02-17 22:02:18

标签: 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;

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);

    }
}

1 个答案:

答案 0 :(得分:2)

在您的第一个版本中,您将覆盖paint方法,而不是调用超类“paint方法”。在第二个,你是,这允许基类中的代码绘制文本。

如果您不想调用超类'paint方法,则必须更改paint方法以计算要绘制的字符串的范围并将其拆分到适当的位置,多次调用drawText以在不同的y位置分别绘制每个片段。这就是paintLabelField方法默认执行的操作,因此您需要模拟它。

当您调用超类paint方法时,设置超类上字体的原因以及在paint方法中设置字体的原因不是因为超类“paint方法在setFont对象上调用Graphics,覆盖您在paint方法中执行的操作。