下面的类扩展了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);
}
}
答案 0 :(得分:2)
在您的第一个版本中,您将覆盖paint
方法,而不是调用超类“paint
方法”。在第二个,你是,这允许基类中的代码绘制文本。
如果您不想调用超类'paint
方法,则必须更改paint方法以计算要绘制的字符串的范围并将其拆分到适当的位置,多次调用drawText
以在不同的y位置分别绘制每个片段。这就是paint
中LabelField
方法默认执行的操作,因此您需要模拟它。
当您调用超类paint
方法时,设置超类上字体的原因以及在paint
方法中设置字体的原因不是因为超类“paint
方法在setFont
对象上调用Graphics
,覆盖您在paint
方法中执行的操作。