Пользовательский ObjectChoiceField для сенсорного экрана - PullRequest
0 голосов
/ 23 марта 2011

Я написал свой собственный ObjectChoiceField.Для того, чтобы растянуть всю ширину экрана ComboBox.Класс представлен ниже:

public class ComboBox extends ObjectChoiceField {
    private final int PADDING_HEIGHT = 20;
    private final int width;
    private final int height;

    public ComboBox(Object[] choices, int width) {
        super("", choices, 0, FIELD_LEFT);
        this.width = width;
        this.height = getFont().getHeight() + PADDING_HEIGHT;
        this.setMinimalWidth(width);
    }

    public int getPreferredHeight() {
        return height;
    }

    public int getPreferredWidth() {
        return width;
    }

    protected void layout(int w, int h) {
        setExtent(width, height);
    }

    public void getFocusRect(XYRect rect) {
        rect.set(getFont().getAdvance(getLabel()), 0, width, height);
    }

}

Он работает на симуляторе 9700, но не работает на 9800. Я вижу, что бросает следующую трассировку стека:

C3CD62E3320B498 time: Wed Mar 23 15:10:29 2011  severity:1 type:3 app:Java Exception data:
    IllegalArgumentException
    No detail message
    net_rim_cldc-13(4C48DD41)
     Graphics
     <private>
     0x2726
    net_rim_cldc-13(4C48DD41)
     Graphics
     tileRop
     0x1C92
    net_rim_cldc-19(4C48DD41)
     BitmapBackground
     draw
     0xC4F
    net_rim_cldc-16(4C48DD41)
     ChoiceBox
     draw
     0x42AE
    net_rim_cldc-16(4C48DD41)
     ChoiceField
     paint
     0x55B0
    net_rim_cldc-12(4C48DD41)
     Field
     paintSelf
     0x6CF5
    net_rim_cldc-13(4C48DD41)
     Manager
     paintChild
     0x7040
    net_rim_cldc-19(4C48DD41)
     VerticalFieldManager
     subpaint
     0xC6F0
    net_rim_cldc-13(4C48DD41)
     Manager
     <private>
     0x91C8
    net_rim_cldc-13(4C48DD41)
     Manager
     paint
     0x7BA3
    net_rim_cldc-12(4C48DD41)
     Field
     paintSelf
     0x6CF5
    net_rim_cldc-13(4C48DD41)
     Manager
     paintSelf
     0x7C14
    net_rim_cldc-13(4C48DD41)
     Manager
     paintChild
     0x7040
    net_rim_cldc-19(4C48DD41)
     VerticalFieldManager
     subpaint
     0xC6F0
    net_rim_cldc-13(4C48DD41)
     Manager
     <private>
     0x91C8
    net_rim_cldc-13(4C48DD41)
     Manager
     paint
     0x7BA3
    net_rim_cldc-12(4C48DD41)
     Field
     paintSelf
     0x6CF5
    net_rim_cldc-13(4C48DD41)
     Manager
     paintSelf
     0x7C14
    net_rim_cldc-13(4C48DD41)
     Manager
     paintChild
     0x7040
    net_rim_cldc-13(4C48DD41)
     Manager
     subpaint
     0x72C2
    net_rim_cldc-13(4C48DD41)
     Manager
     <private>
     0x91C8
    net_rim_cldc-13(4C48DD41)
     Manager
     paint
     0x7BA3
    net_rim_cldc-12(4C48DD41)
     Field
     paintSelf
     0x6CF5
    net_rim_cldc-13(4C48DD41)
     Manager
     paintSelf
     0x7C14
    net_rim_cldc-13(4C48DD41)
     Manager
     paintChild
     0x7040
    net_rim_cldc-13(4C48DD41)
     Manager
     subpaint
     0x72C2
    net_rim_cldc-13(4C48DD41)
     Manager
     <private>
     0x91C8
    net_rim_cldc-13(4C48DD41)
     Manager
     paint
     0x7BA3
    net_rim_cldc-12(4C48DD41)
     Field
     paintSelf
     0x6CF5
    net_rim_cldc-13(4C48DD41)
     Manager
     paintSelf
     0x7C14
    net_rim_cldc-13(4C48DD41)
     Manager
     paintChild
     0x7040
    net_rim_cldc-14(4C48DD41)
     Screen
     paint
     0x3725
    net_rim_cldc-12(4C48DD41)
     Field
     paintSelf
     0x

Возможно, это связаноТот факт, что я использую для создания проекта BB инструменты ... У вас есть идеи, как исправить?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Вам необходимо вызвать super.layout (w, h) из вашего метода макета, чтобы ObjectChoiceField мог правильно установить свое внутреннее состояние. После super.layout вы можете вносить любые необходимые изменения.

0 голосов
/ 31 октября 2011

макет вызывает проблему.Если вы удалите его, это работает.

Может быть, вы можете установить ширину, но я не уверен в высоте.

...