Текст Labelfield не переносится - PullRequest
0 голосов
/ 18 февраля 2011

Класс ниже расширяет поле метки, но когда я отображаю большой объем текста, он не переносится на новую строку. Текст просто тянется по экрану. Когда я использую 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 Ответ

2 голосов
/ 18 февраля 2011

В вашей первой версии вы переопределяете метод paint и не вызываете метод paint суперкласса.Во-вторых, вы позволяете коду в базовом классе рисовать текст.

Если вы не хотите вызывать метод paint суперкласса, вам нужно изменить метод рисования навычислите экстент строки, которую вы собираетесь нарисовать, и разделите ее в соответствующих точках, сделав несколько вызовов drawText, чтобы нарисовать каждый фрагмент отдельно в другом месте y.Это то, что метод paint в LabelField делает по умолчанию, поэтому вам нужно его эмулировать.

Когда вы вызываете метод суперкласса paint, причина установки шрифта в суперклассе работает и настройкашрифт в вашем методе paint отсутствует, потому что метод paint суперкласса вызывает setFont объекта Graphics, переписывая то, что вы только что сделали в своем методе paint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...