TabLayoutPanel с прокруткой

Я использую TabLayoutPanel в GWT-приложении, прикрепленном к RootLayoutPanel страницы.

Внутри каждой вкладки у меня есть ScrollPanel, которая используется для отображения FlexTable.

Можно ли заставить TabLayoutPanel расти вертикально, чтобы пользователь мог прокручивать всю страницу, используя полосу прокрутки браузера, вместо использования внутренней ScrollPanel?

4 ответа

Решение

Просто добавьте новый стиль в TabLayoutPanel:

this.addStyleName("tab-style-content");

И определите в своем CSS как:

.tab-style-content .gwt-TabLayoutPanelContent
{
overflow: auto;     
}

Таким образом, свойство overflow будет перезаписано в gwt-TabLayoutPanelContent, и полоса прокрутки будет показана автоматически.

Краткий ответ: это невозможно с LayoutPanel's. Причина: LayoutPanel предназначены для приложений, которым необходимо заполнить клиентскую область браузера, или, другими словами, часть, видимую пользователем. Одной из проблем браузеров является наличие виджета, который имеет в точности высоту видимой области, а также автоматически изменяет размеры при изменении размера окна браузера. Это одна из проблем, которую решают LayoutPanels.

Если вы хотите использовать полосу прокрутки браузера и иметь возможность создавать страницы длиннее видимой области, используйте "обычные" панели.

Кстати, к вашему сведению, FlexTable медленен в рендеринге и, если возможно, лучше использует Grid.

Если вы сделаете TabLayoutPanel больше, чем корневая панель, вы получите полосу прокрутки браузера.

Если я хочу добиться чего-то подобного, я всегда помещаю TabLayoutPanel в SimplePanel и добавляю SimplePanel в RootPanel. Я думаю, это не лучший способ, но он работает.

public void onModuleLoad() {
   //Create TabPanel
   TabPanel tp = new TabPanel();
   tp.add(new HTML("Foo"), "foo");
   tp.add(new HTML("Bar"), "bar");
   tp.add(new HTML("Baz"), "baz");
   tp.selectTab(1);
   // Create SimplePanel and add TabPanel
   SimplePanel sp =new SimplePanel();
   sp.add(tp);
   // Add SimplePanel to the root panel.
   RootPanel.get().add(sp);
}
Другие вопросы по тегам