2013-09-23 1 views
0

У меня есть приложение J2me LWUIT, которое использует список. Каждая ячейка в списке содержит изображение и текстовую область. TextArea не будет расти. Я прочитал, что в списке все ячейки должны быть одинакового размера, поэтому я должен использовать ContainerList.LWUIT: Multi-Line TextArea в списке. Не разрешено с помощью ContainerList

С ContainerList У меня такая же проблема! Моя TextAreas не будет расти. Здесь я создаю TextArea:

TextArea caption = new TextArea(); 
    caption.getStyle().setBgTransparency(255); 
    caption.getStyle().setBgColor(0x060507); 
    caption.getStyle().setBorder(null); 
    caption.getStyle().setFgColor(0xf0f0f0); 
    caption.getStyle().setFont(Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM)); 
    caption.getStyle().setMargin(0,10,10,10); 

    caption.setText(m.caption_text); 
    caption.setGrowByContent(true); 
    caption.setSingleLineTextArea(false); 
    cellCon.addComponent(caption); 

cellCon - это вертикальный BoxLayout. Даже если я удалю изображение, они не будут расширяться. Если я изменил cellCon на использование BorderLayout и разместил изображение NORTH и TextArea SOUTH, TextArea расширится, но накладывается на изображение (как будто оно все еще пытается поддерживать равномерную высоту).

я создаю ContainerList так:

list = new ContainerList(new BoxLayout(BoxLayout.Y_AXIS),new DefaultListModel(data)); 

Как сделать эту работу?

+0

Если вы хотите задать еще один вопрос, добавьте его в новую тему – Mun0n

+0

И вопрос для вас. Почему вы используете ContainerList? Простой список не соответствует вашему пользовательскому интерфейсу? – Mun0n

+0

Спасибо за ваш ответ. По-видимому, List требует, чтобы каждая ячейка была одинаковой высоты. Очевидно, что это не будет работать для TextAreas с переменным размером. Я попробую некоторые из предложений в вашем ответе позже, когда у меня появится шанс. –

ответ

0

Видимо growByContent не работает в ContainerList. В конечном итоге мне пришлось отказаться от ContainerList, вместо этого использовать Контейнер компонентов. В этом контексте growByContent отлично работает.

0

Вы можете попробовать это двумя способами, отдельными или комбинированными.

Попробуйте установить текст для TextArea в конструкторе компонента. Я имею в виду

TextArea caption = new TextArea(m.caption_text); 

Обычно это нормально, когда вы устанавливаете текст в конструкторе. Размер TextArea измените размер как следует. Если вы не хотите использовать это. Вы можете создать TextArea и установить после, строки и столбцы с setRows() и setColumns(). Я не знаю, почему, но размер TextArea не очень хорошо работает.

Другая рекомендация: можете ли вы установить макет на BorderLayout, установив изображение в центре и текст на юге?

+0

Настройка текста в конструкторе, похоже, не имеет значения –

+0

Когда я делаю ваше предложение BorderLayout, TextArea расширяется, но, как представляется, расширяется вверх, закрывая часть изображения. Какая часть изображения покрыта, зависит от количества строк ... кажется, что последняя строка TextArea всегда находится прямо под изображением, где мне нужна первая строка. Это то, что изначально заставило меня подумать, что List или ContainerList вытеснили единую высоту клетки. –

+0

Если вы хотите иметь список с разной высотой в элементах, не используйте компонент списка. Создайте контейнеры и поместите их в BoxLayout Y. Единственный способ установить элементы с разными высотами – Mun0n