【问题标题】:Labelfield text not wrapping标签字段文本不换行
【发布时间】:2011-02-18 08:46:35
【问题描述】:

下面的类扩展了 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);

    }
}

【问题讨论】:

  • 嗯,我想知道,与其自己执行graphics.drawText,不如运行setColor 和setFont 语句,然后调用super.paint(graphics)?这应该可以解决您的问题。
  • @Scott W 您不妨将您的评论提升为答案。
  • 试过了,换行了,但字体没有更新。所以它修复了错误,但似乎导致了另一个错误。
  • 在超类上设置字体有效。查看对问题的编辑。我不知道为什么?感谢您的帮助

标签: blackberry


【解决方案1】:

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

如果你不想调用超类的paint方法,你必须改变你的paint方法来计算你要绘制的字符串的范围,并在适当的点分割它,使多个调用drawText 在不同的 y 位置分别绘制每个片段。这就是LabelField 中的paint 方法默认的作用,所以你需要模拟它。

当您调用超类paint 方法时,在超类上设置字体有效而在paint 方法中设置字体不起作用的原因是因为超类的paint 方法正在调用setFontGraphics 对象上,覆盖你刚刚在 paint 方法中所做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多