GWT TabLayoutPanel — динамическая высота?

У меня есть TabLayoutPanel, и я не хочу давать ему фиксированную высоту, как в следующем примере кода (tabPanel.setHeight("100px");). Я хочу указать высоту содержимого вкладки, например. HTML-виджет на первой вкладке). Если я не устанавливаю высоту вручную, содержимое вкладки вообще не отображается. Есть ли способ заставить это работать с высотой, адаптированной к содержимому?

public class GWTTest implements EntryPoint {

    public void onModuleLoad() {
        TabLayoutPanel tabPanel = new TabLayoutPanel(3, Unit.EM);

        tabPanel.setAnimationDuration(400);
        tabPanel.add(new HTML("Tab1 Content"), "Tab 1");

        tabPanel.add(new HTML("Tab2 Content"), "Tab 2");

        tabPanel.setHeight("100px");

        RootPanel.get().add(tabPanel);

    }
}

Я также пытался возиться непосредственно в css с атрибутами «переполнение» и «положение», но это всегда ломает анимацию или что-то еще.

Редактировать. Кажется, самым простым способом было бы реализовать мою собственную панель вкладок или использовать существующую библиотеку javascript.


person jan    schedule 09.06.2013    source источник


Ответы (2)


Панели макета — это особый тип контейнера в GWT, который требует размеров от своих родителей и может изменять размер самостоятельно. Основой являются два интерфейса ProvidesResize и RequiresResize - указывает, что объект будет изменять размер своих дочерних элементов, другой - что его размер должен изменяться при изменении размера родителя. Большинство панелей макета (таких как TabLayoutPanel) реализуют и то, и другое — ему нужно изменить размер родительского элемента, и когда он его получит, он изменит размер своих дочерних элементов для каждой вкладки.

Однако, чтобы запустить его, вам нужно добавить корневой виджет в RootLayoutPanel, а не в RootPanel. Есть несколько основных отличий - есть только одна RootLayoutPanel (без метода get(String)), и RootLayoutPanel будет определять размер своих дочерних элементов, а RootPanel - нет.

Используйте RootLayoutPanel.get().add(tabPanel) вместо RootPanel.get().add(tabPanel).

person Colin Alworth    schedule 10.06.2013

Я также столкнулся с этой проблемой, но, к сожалению, для этого требуется установить высоту. Все обходные пути оказались неудачными. Но некоторые из них предполагают следующее.

Вы можете попробовать заменить TabLayoutPanel на Панель заголовка:

Панель, которая включает заголовок (вверху), нижний колонтитул (внизу) и область содержимого (посередине). Области верхнего и нижнего колонтитула изменяются естественным образом. Область содержимого занимает все оставшееся пространство между областью верхнего и нижнего колонтитула.

В качестве альтернативы вы можете переопределить метод onResize(), чтобы ResizeLayoutPanel вычислить высоту вашего встроенного контента и установить соответствующую высоту.

Если вам нужна функция прокрутки, вам нужно встроить VerticalPanel в ScrollPanel или используйте CSS для установки свойства oferflow.

person Abhijith Nagaraja    schedule 09.06.2013
comment
Так работает предложенное решение или нет? :) Нашли рабочее решение или оно у вас не работает? - person jan; 09.06.2013
comment
Никакое предложенное решение не сработало для меня. Панель вкладок требует установки высоты. Может быть, я сделал что-то не так. - person Abhijith Nagaraja; 10.06.2013